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> result;
string s(n,'0');
result.push_back(0);
for(int i=1;i<pow(2,n);i++){
if(i%2==1){
s[n-1]=(s[n-1]+'1')%48%2+'0';//方便处理1和0之间的交替改变,也可用if 1,if 0
}
else{
for(int j=n-1;j>=0;j--)
if(s[j]=='1'){
s[j-1]=(s[j-1]+'1')%48%2+'0';
break;
}
}
int v=0;
for(int j=0;j<n;j++)
v+=pow(2,n-1-j)*(s[j]-'0');
result.push_back(v);
}//for
return result;
}
};