1 题目描述
格雷码是一种二进制编码系统,如果任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code)。
给定一个非负整数n,表示代码的位数,打印格雷码的序列。格雷码序列必须以0开头。
例如:给定n=2,返回[0,1,3,2]. 格雷码的序列为:
00 - 0
01 - 1
11 - 3
10 - 2
注意:
- 对于一个给定的n,格雷码的序列不一定是唯一的,
- 例如:根据题目描述,[0,2,3,1]也是一个有效的格雷码序列
2 解题思路
3 代码实现
class Solution {
public:
grayCode(int n) {
vector<int> res;
res.push_back(0);
for(int i = 0; i < n; i++){
const int high_bit = 1 << i;
for(int j = res.size() - 1; j >= 0; j--)
res.push_back(high_bit | res[j]);
}
return res;
}
};
4 运行结果
运行时间:3ms
占用内存:388k