1 class Solution 2 { 3 public: 4 vector<int> grayCode(int n) 5 { 6 int mount=(1<<n); 7 vector<int> res(mount); 8 for(int i=0;i<mount;i++) 9 res[i]=i^(i>>1); 10 return res; 11 } 12 };
方法过于强势以致于看不懂为啥
下面这个是常人方法,以0和1为基准,在这上面进行容器的累加
1 class Solution 2 { 3 public: 4 vector<int> grayCode(int n) 5 { 6 vector<int> res={0}; 7 if(n==0) 8 return res; 9 res.push_back(1); 10 if(n==1) 11 return res; 12 int base=2,count=2; 13 while(count<=n) 14 { 15 vector<int> cur=res; 16 int sz=res.size(); 17 for(int i=sz-1;i>=0;i--) 18 cur.push_back(res[i]+base); 19 res=cur; 20 base*=2; 21 count++; 22 } 23 return res; 24 } 25 };