[腾讯]生成格雷码

时间限制:3秒 空间限制:32768K 热度指数:24655
本题知识点: 递归

题目描述

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。

给定一个整数n,请返回n位的格雷码,顺序为从0开始。

测试样例:
1
返回:["0","1"]

思路:

class GrayCode {
public:
    vector<string> getGray(int n) {
        // write code here
        vector<string> gray;  
        if(n==1)
            {
               gray.push_back("0");
               gray.push_back("1");
            
           return gray;
        }
        else{
                vector<string> gray1;
                gray1=getGray(n-1);
                
                int graySize=gray1.size();
                vector<string> gray2;
                
                for(int i=0;i<graySize;i++)
                    {
                        if(i%2==0)
                            {
                               gray2.push_back(gray1[i]+"0");
                               gray2.push_back(gray1[i]+"1");
                        }
                    else{
                          gray2.push_back(gray1[i]+"1");
                          gray2.push_back(gray1[i]+"0");
                    }
                }
            return gray2;
        }
            
    }
};
 
posted @ 2017-05-31 20:15  懒小小喵  阅读(158)  评论(0编辑  收藏  举报