[leetcode] Gray Code

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

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

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

For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
 
二进制转格雷码: 
从左边第二位起,将每位与左边一位的值异或,作为该位转码后的值(最左边一位依然不变)。 

格雷码转二进制:
从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变)。
 
class Solution
{
public:
  vector<int> grayCode(int n)
  {
    int size = 1 << n;
    vector<int> ret(size);

    for(int i=0; i<size; i++)
      ret[i] = i ^ (i >> 1);

    return ret;
  } 
};

 

posted @ 2015-05-08 16:01  imKirin  阅读(138)  评论(0编辑  收藏  举报