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) {
     /*
     vector<int>res;
     int k=1,i,j;
     for(i=0;i<n;i++)
     {
         k *=2;
     }
     for(i=0;i<k;i++)
     {
         res.push_back(i);
     }
     return res;
     */
     vector<int>res;
     vector<int>::iterator it;
     int k=1,i,j,m,s;

     res.push_back(0);
     if(n!=0)
     res.push_back(1);
     for(i=1;i<n;i++)
     {
         k *=2;
         s=k;
         //it = res.end()//为什么迭代器整天出问题呢?
         //it--;
         for(j=0;j<k;j++)
         {

             m = res[s-1];
             //if(j==2)
            // res.push_back(m);
             res.push_back((m+k));
             //it--;
             s--;
         }
     }
     return res;
    }
};
posted @ 2015-11-28 16:54  djiankuo  阅读(173)  评论(0编辑  收藏  举报