zoukankan      html  css  js  c++  java
  • 腾讯在线模拟笔试题目,格雷码问题

    class GrayCode {
    public:
        vector<string> strVec;
        void func(int n, string str,bool tag)
        {
            if(n==1)
                if (true == tag)
                {
                    strVec.push_back(str + "0");
                    strVec.push_back(str + "1");
                    return;
                }
                else
                {
                    strVec.push_back(str + "1");
                    strVec.push_back(str + "0");
                    return;
                }
            else if (true == tag)
            {
                func(n - 1, str + "0",true);
                func(n - 1, str + "1",false);
            }
            else
            {
                func(n - 1, str + "1",true);
                func(n - 1, str + "0",false);
            }
        }
        vector<string> getGray(int n) {
            // write code here
            func(n, "", true);
            return strVec;
        }
    };

    当n=1时,“0”,“1”;

    当n=2时,“00”,“01”,“11”,“10“;

    当n=3时,“000”,“001”,“011”,“010”,“110”,“111”,“101”,“100”;

    由此可以看出,每次向下递归调用时,总是在原来的字符串的基础上加“0”,“1”,“1”,“0“,”0“,”1“。。。。。

    因此要设置一个标志位,用来判断是先加“0”,还是先加“1”;

  • 相关阅读:
    mysqllog
    清理:db上面的过期的binlog,释放磁盘空间。 (转)
    linux下shell命令trap
    mvc
    uci随笔
    luci 随笔
    shell脚本 整数比较
    lua学习
    OPENWRT make menuconfig错误之一
    openwrt 中make的使用
  • 原文地址:https://www.cnblogs.com/csudanli/p/5344549.html
Copyright © 2011-2022 走看看