Gray Code

在纸上画了好一会也没找出什么规律来,百度一下,嘿,居然真有这个算法,一看,这么简单,哎。这个年代知识面不广都活不下去了!


http://blog.csdn.net/tingmei/article/details/8045054


二进制码->格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0);
格雷码->二进制码(解码):从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变)。


Gray Code 0 = 0, 下一项是toggle最右边的bit(LSB), 再下一项是toggle最右边值为 “1” bit的左边一个bit,然后重复。直到最右边值为 “1” 的bit在最左边了,结束。

[cpp]  view plain copy
  1. class Solution {  
  2. public:  
  3.     vector<int> grayCode(int n) {  
  4.         // Start typing your C/C++ solution below  
  5.         // DO NOT write int main() function  
  6.         vector<int> result;  
  7.         int nSize = 1 << n;  
  8.         for (int i = 0; i < nSize; ++i)  
  9.         {  
  10.             result.push_back((i>>1)^i);  
  11.         }  
  12.         return result;  
  13.     }  
  14. };  


你可能感兴趣的:(Gray Code)