Gray Code
Total Accepted: 32175 Total Submissions: 98703My Submissions
Question Solution
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.
Hide Tags
这道题的意思是给出n值时,给出n位的格雷码所对应的数字的向量,这道题采用回溯法,因为n位的与n-1位的格雷码是有关系的,前半部分与n-1位的相同。后半部分的由对称的前面那部分加上2^n-1,所以采用递归的往回溯。
下面是AC的代码
#include<iostream> #include<vector> #include <queue> using namespace std; int conversion(int n) { int temp=1; if(n==1) return 1; for(int i=1;i<n;i++) temp=temp*2; return temp; } vector<int> grayCode(int n) { vector<int> result; if(n==0) { result.push_back(0); return result; } if(n==1) { result.push_back(0); result.push_back(1); return result; } else { //queue<int> temp; result=grayCode(n-1); int len=result.size(); for(int i=len-1;i>=0;--i) { int temp=result[i]+conversion(n); result.push_back(temp); } return result; } } int main() { vector<int> temp=grayCode(4); for(int i=0;i<temp.size();i++) cout<<temp[i]<<endl; }