您的位置:首页 > 其它

(算法)格雷码

2015-09-07 20:21 309 查看

题目:

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=3时,GrayCode是:
000
001
011
010
110
111
101
100

思路:

n位的格雷码可以从n-1位的格雷码得到,n位的格雷码组成:1、n-1位的格雷码2、n-1位的格雷码的逆序+(1<<(n-1))如下图:

代码:

#include<iostream>
#include<vector>

using namespace std;

// Non_Recursive
vector<int> GrayCode_1(int n){
vector<int> result;
result.push_back(0);

for(int i=0;i<n;i++){
int len=result.size();
int c=1<<i;
for(int j=len-1;j>=0;j--)
result.push_back(result[j]+c);
}

return result;
}

// Recursive
void GrayCode_2(vector<int> &result,int n){
if(n==0){
result.push_back(0);
return;
}

GrayCode_2(result,n-1);
int len=result.size();

for(int i=len-1;i>=0;i--)
result.push_back(result[i]+(1<<(n-1)));

}

int main(){
int n=4;
vector<int> result1;
vector<int> result2;

result1=GrayCode_1(n);
GrayCode_2(result2,n);

for(int i=0;i<result1.size();i++)
cout<<result1[i]<<" ";
cout<<endl;

for(int i=0;i<result2.size();i++)
cout<<result2[i]<<" ";
cout<<endl;

return 0;
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: