您的位置:首页 > 其它

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

2016-04-01 12:37 393 查看
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”;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: