博客转载请注明地址:http://blog.csdn.net/sunliymonkey/article/details/48273609
题目描述
题目地址:https://leetcode.com/problems/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
考察点
格雷码的生成方式
陷阱
无
Code
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> ret;
int s = 1 << n;
int pre, cur, p;
int g;
for(int num = 0; num < s; num ++){
pre = 0;
g = 0;
p = s;
for(int i = n-1; i >= 0; i--){
p >>= 1;
cur = (num & p) != 0;
g = (g << 1) | (pre ^ cur);
pre = cur;
}
ret.push_back(g);
}
return ret;
}
};