格雷码(gray code)
2014-09-17 21:30
369 查看
格雷码是二进制数字系统,两个顺序格雷码之间只有一位(one bit)不同。例如2位的格雷码序列:[0,1,3,2]。
00 -- 0
01 -- 1
11 -- 3
10 -- 2
现给出格雷码的位数,求出格雷码序列。
可以用如下规则(fromhttp://baike.baidu.com/view/358724.htm?from_id=11296193&type=syn&fromtitle=Gray+code&fr=aladdin)递归构造:
1位格雷码有两个码字
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
我写了一个测试代码,如下:
1位格雷码有两个码字
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
00 -- 0
01 -- 1
11 -- 3
10 -- 2
现给出格雷码的位数,求出格雷码序列。
可以用如下规则(fromhttp://baike.baidu.com/view/358724.htm?from_id=11296193&type=syn&fromtitle=Gray+code&fr=aladdin)递归构造:
1位格雷码有两个码字
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
我写了一个测试代码,如下:
/** * 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 * * * Above describe from leetcode Gray Code. * * Edit by jianyong lee * Southwest University * 2014/9/17 * */ #include <iostream> #include <vector> using namespace std; class Solution { public: Solution() {} vector<int> grayCode(int n); }; vector<int> Solution::grayCode(int n) { vector<int> r1{0,1}; if(n==1) { return r1; } vector<int> temp=grayCode(n-1); vector<int> r2(temp); for(vector<int>::iterator it=temp.end()-1;it>=temp.begin();it--) { // 计算二进制位数 傻逼,n就是二进制的位数!!!! // ad右移n-1位 int ad=1; for(int i=0;i<n-1;i++) { ad=ad<<1; } int num=(*it)+ad; r2.push_back(num); } return r2; } template<typename T> std::ostream &operator<<(std::ostream &s,const vector<T> &v) { for(const auto e:v) { s<<e<<" "; } return s; } int main() { cout << "Hello World!" << endl; Solution sulo; vector<int> rs; rs=sulo.grayCode(4); cout<<rs<<endl; return 0; }
1位格雷码有两个码字
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1
相关文章推荐
- [leetcode](Gray Code 格雷码 C语言实现)
- gray code 格雷码 递归
- c++实现gray code(格雷码)
- leetcode89-Gray Code(格雷码)
- 利用 格雷码(Gray code) 求集合的子集
- 【LeetCode-面试算法经典-Java实现】【089-Gray Code(格雷码)】
- [Leetcode] Gray code 格雷码
- 第七次作业格雷码(Gray code)序列NO.1
- Gray Code 格雷码
- c++实现gray code(格雷码)
- gray code 格雷码求解问题
- [LeetCode]—Gray Code 计算格雷码
- Gray Code(格雷码)
- Algorithm Gossip: 格雷码(Gray Code)
- Gray Code - 格雷码
- 递归——生成格雷码(gray code)
- 格雷码(Gray Code)序列
- LeetCode:Gray Code(格雷码)
- Gray Code 格雷码
- LeetCode OJ 之 Gray Code(格雷码)