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> buildGrayCode(int n) { } int ans(int n) { //每一位都 i & (i -1) vector<int> vec; int x = 1 << n; for(int i=0; i<x; i++) { vec.push_back(i & (i>>1)); cout << vec[i] << ‘ ‘; } return vec; } //可以改成递归 int recur_ans(int n) { vector<int> vec; if(n < 0 ) return vec; if(n == 1) { vec.push_back(0); vec.push_back(1); return vec; } for(int i=2; i<n; i++) { int highbit = 1 << (i - 1); for(int j = vec.size() -1; j>=0; j--) { vec.push_back(highbit|j); } } return vec; } vector<int> recur_ans2(int n) { if(n ==0) { vector<int> vec; vec.push_back(0); return vec; }else{ vector<int> res = recur_ans2(n-1); int len = res.size(); int highbit = 1 << (n-1); for(int i=len-1; i>=0; i--) { res.push_back(res[i] | highbit ); } return res; } } };
leetcode笔记:Gray Code(2016腾讯软件开发笔试题)
原文:http://my.oschina.net/u/573270/blog/504097