题目描述
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。
给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/gray-code
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
二进制转格雷码的公式如下
即保留二进制位的最高位,从低位开始,每一位与比该位高的一位异或。所以遍历0~2n-1,每一个数右移一位与它本身异或得到该数的格雷码。
代码(c++)
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> res;
for(int i=0;i<1<<n;i++){
res.push_back(i^i>>1);
}
return res;
}
};