问题:
递归打印出N位格雷码(相邻两个编码只有一位数字不同):
      问题化归为:现有前N位的格雷码,如何构造N+1位的格雷码?

解决方法:采用递归构造格雷码集和。

  递归出口:n = 1; 此时格雷码{0,1}
  N+1:N+1位的格雷码 = N位格雷码(顺序)+0,N位格雷码逆序+1(N位的格雷码顺序最后一个编码与逆序第一个编码是同一个编码,在此可以分别加0,1两个编码依旧只有一位不同)

public class GC{
int[][] G;//
int N;
int SIZE;
GC(int N){
this.N = N;
SIZE =(int)Math.pow(2,N);
G = createG(G,N);
}
public int[][] createG(int[][] g,int N){//由原有的格雷码集合g造新的格雷码集G 递归构造
if(N <1){
return null;
}
if(N == 1){
g = new int[2][1];
g[0][0] = 0;
g[1][0] = 1;
return g;
}
g = createG(g,N-1);
SIZE =(int)Math.pow(2,N);
G = new int[SIZE][N];
int n =N-1;//原格雷码的位数
for(int i =0;i<SIZE/2;i++){//顺序
for(int j=0;j<n;j++){
G[i][j] = g[i][j];
}
G[i][N-1] = 0;
}
for(int i = SIZE/2;i<SIZE;i++){//逆序
for(int j=0;j<n;j++){
G[i][j] = g[SIZE-1-i][j];
}
G[i][N-1] = 1;
}
return G;
}
public void show(){
for(int i =0;i<SIZE;i++){
for(int j=0;j<N;j++){
System.out.print(G[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args){
int N = new Integer(args[0]).intValue();
GC G= new GC(N);
G.show();
return;
}
}

最新文章

  1. 使用 Wireshark 调试 HTTP/2 流量
  2. 【转】一个lucene的官网例子
  3. 使用Let&#39;s Encrypt手动创建https证书
  4. How to use kingshard building a MySQL cluster
  5. Oracle instr函数与SqlServer charindex的区别
  6. Mac废纸篓 不能完全清空的有效解决方法
  7. selenium+python登录登出百度,等待页面加载,鼠标定位
  8. php的一些简单算法程序(冒泡、快速等)
  9. 射频识别技术漫谈(9)&mdash;&mdash;动物标签HDX【worldsing笔记】
  10. GNU工具链学习笔记
  11. Web前端之HTML
  12. IOS发展--他们控制的定义
  13. svn 安装网站
  14. centos7基于samba服务配置实例
  15. iOS 上传自己的工程(模块工具类)到cocoapods上遇到坑
  16. Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
  17. MS SqlServer还原数据库,出现媒体簇的结构不正确
  18. 趣文分享:有人将Android开发环境比作女人
  19. Elasticsearch集群监控工具bigdesk插件安装
  20. Identical Binary Tree

热门文章

  1. 微信小程序左右滑动切换图片酷炫效果
  2. set&amp;enum小结(database)
  3. Django 发送邮件
  4. Windows核心编程&amp;内核对象
  5. MySql全文索引
  6. promise使用方法
  7. 我的运维之旅-查找文本的linux命令
  8. Halcon一日一练:Halcon异常判断方法
  9. 02_HTML5+CSS详解第三天
  10. CSS——盒模型