leetcode第一刷_Gray Code

来源:互联网 发布:数据化武道 编辑:程序博客网 时间:2024/06/06 00:18

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

思想是这样的,如果有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;    }};


0 0
原创粉丝点击