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”;