89. Gray Code
题目描述:
The gray code is a binary numeral system where two successive values differ in only one bit.
Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.
For example, given n = 2, return [0,1,3,2]
. Its gray code sequence is:
00 - 0 01 - 1 11 - 3 10 - 2
题目链接:89. Gray Code
算法描述:
由题意可知,给出格雷码的位数 n ,要求返回一个存贮着满足要求的格雷码对应的十进制数。格雷码要求连续两个数只有一位数不同,如:000 —> 001,不能 000 —> 011。
我们寻找格雷码的规律,用一张图来表示:(链接见:点击打开链接 )
我们可以发现:对于 N 位的格雷码,等于 N-1 位的格雷码进行形式上 “对称反射” 形成新的一组数,并在新的位上加 “1”。我们用 “1 << i” 表示在新的位至 “1”,而 “对称反射” 我们用从后往前遍历之前的 vector 中已存在的数。"( 1 << i ) + ans [j] "表示新的格雷码。
代码:
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> ans(1);
for(int i=0; i<n; i++){
for(int j=ans.size()-1; j>=0; j--){
ans.push_back((1<<i)+ans[j]);
}
}
return ans;
}
};