导航

腾讯在线模拟笔试题目,格雷码问题

Posted on 2016-04-01 12:37  CSU蛋李  阅读(209)  评论(0编辑  收藏  举报
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”;