Leetcode Gray Code

OpenSoucre發表於2014-07-03

題目的意思就是將十進位制轉換成格雷碼

首先將二進位制轉換成格雷碼

根據此圖可以看出二進位制的第i和第i+1位異或為格雷碼的第i+1位,對於給定的十進位制數x,其(x>>1)相當於二進位制向右移動一位

將 x^(x>>1)剛好能按照上述方式完成異或,故結果為x的格雷碼

class Solution {
public:
    vector<int> grayCode(int n) {
        vector<int> res;
        for(int x = 0 ; x< (1<<n);++ x) res.push_back(x^(x>>1));
        return res;
    }
};