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.
这道题感觉是一个找规律的题目,找到规律后就非常好求解,感觉不是一道回溯的题。
对于n=2,它的结果包含n=1时的结果左边补零,以及逆序遍历n=1时的结果左边补1。 规律例如以下图,列出了n=1,n=2,n=3时的情况。
依据这个规律假设已知n=k的情况,那么n=k+1的结果包含对n=k的结果左边补零,即保存不变。然后逆序遍历n=k的结果左边补1就可以。 runtime:4ms
class Solution { public: vector<int> grayCode(int n) { vector<int> result(1); for(int i=0;i<n;i++) { for(int j=result.size()-1;j>=0;j--) { result.push_back((1<<i)+result[j]); } } return result; } }。解法二就涉及到gray code的数学知识了。要是知道这个数学知识。能够在几分钟之内就解出这道题。 格雷码能够由相应的十进制数求出:grayCode=i^i>>1 runtime:4ms
class Solution { public: vector<int> grayCode(int n) { vector<int> result; for(int i=0;i<1<<n;i++) { result.push_back(i^i>>1); } return result; } };转载于:https://www.cnblogs.com/bhlsheji/p/5374990.html