(算法)格雷码
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; }
相关文章推荐
- 数值颠倒
- [代码段]反射输出一个Type的信息
- 禁止Ubuntu开机进入guest session
- Delete Digits
- 找准位置
- 系统集成项目管理工程师(项目经理)笔记
- 周赛一 ACdream 1199 排列组合
- 第一章 绪论
- 多态和虚表
- Android 数据存储:五大存储之File存储(内部存储与外部存储)
- mysql数据库创建、删除数据库
- window获取系统默认浏览器并打开相应的网址
- Processing 教程(7) - 平移、旋转、放缩
- 聊天服务器-客户端
- 高效开发之SASS篇
- 后缀数组 (倍增法) 个人理解
- Find them, Catch them---poj1703(并查集)
- ERROR: HHH000388: Unsuccessful: create table right (right_code varchar(255) not null auto_increment,
- hadoop配置好之后启服务,jps能看到datanode进程,可是后台的datanode日志有如下错误,且50070端口上也是没有活的节点
- 大数据之nutch