leetcode第一刷_Gray Code

说到格雷码,应该没人不知道,详细它有什么用,我还真不是非常清楚,我室友应该是专家。生成的规律不是非常明显,之前看到帖子讲的,这会儿找找不到了。。

思想是这种,假设有n位,在第2^(n-1)个编码以下画一条水平线的话,你会发现除了第一位之外,其它位都是关于这条线对称的,例如以下,以三位格雷码举例:

000

001

011

010

---------------------

110

111

101

100

非常奇妙吧,我曾经是不知道这个规律的。从一開始的一位格雷码,0,1,開始,每次对称的在上一个前面加入上0和1,就得到了下一个长度的全部格雷码。

我呢这道题没有这么写,偷了个懒,由于另一种更加简洁的方法,详细原理我还没有參透,应该是格雷码定义用的方法?代码贴在以下:

class Solution {
public:
    vector<int> grayCode(int n) {
        vector<int> res;
        if(n == 0){
            res.push_back(0);
        }else{
            for(int i=0;i<pow(2, n);i++)
                res.push_back((i>>1)^i);
        }
        return res;
    }
};


posted @ 2014-09-25 19:05  lcchuguo  阅读(169)  评论(0编辑  收藏  举报