说到格雷码,应该没人不知道,详细它有什么用,我还真不是非常清楚,我室友应该是专家。生成的规律不是非常明显,之前看到帖子讲的,这会儿找找不到了。。
思想是这种,假设有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; } };