LeetCode: Gray Code [089]

【題目】


The gray code is a binary numeral system where two successive values differ in only one bit.post

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.spa

For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:code

00 - 0
01 - 1
11 - 3
10 - 2

Note:
For a given n, a gray code sequence is not uniquely defined.blog

For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.ip

For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.it




【題意】

    本題是有關格雷碼轉換的,知道二進制轉換爲格雷碼的轉換規則,本題就很easy了。
    給定二進制下的位數n, 要求獲得格雷碼序列,並輸出每個格雷碼相應的十進制表示。相鄰格雷碼之間僅僅有一位不一樣。


    對於輸入的n,格雷碼序列可能有多個,題目要求輸出任一個序列就能夠。
    序列必須以0開始。io


【思路】

    n位二進制可表示2^n個數。所以格雷碼序列長度即爲2^n
    咱們僅僅需從小到大把二進制轉換成相應的格雷碼就能夠。轉換規則例如如下:
    若是二進制數爲x, 則其相應的格雷碼爲x>>1^x
    即x和其自己向右移動一位後的結果作抑或運算。
    
    【注意。n=0是本題以爲它能表示一個值0】


【代碼】

class Solution {
public:
    vector<int> grayCode(int n) {
        vector<int> result;
        
        int size=1<<n;  //一共可以表示2^n個數
        int x=0;
        while(x<size){
            result.push_back(x>>1^x);   //轉換成相應格雷碼
            x++;
        }
        return result;
    }
};
相關文章
相關標籤/搜索