Gray码是一种数字编码方式,是一个长度为
如:
当n= 1时
0
1
当n= 2时
00
01
11
10
当n= 3时
000
001
011
010
110
111
101
100
从以上可以看出,gray的规律
m = pow(2, n);
gray(n) = 0gray(n-1) (k < m/2)
1rgray(n-1) (k >= m/2, rgray()是gray序列的逆序)
java代码实现:
public class Gray {
public static char[][] gray(int n) {
int m = (int)Math.pow(2, n);
char g[][] = new char[m][n];
char g1[][];
if(n <1) {
System.err.println("the number of n should larger than zero!");
return null;
} else if(1 == n){
g[0][0] = '0';
g[1][0] = '1';
} else if(n > 1){
g1 = gray(n-1);
for(int i=0; i<m; i++) {
if(i < m/2) {
g[i][0] = '0';
} else {
g[i][0] = '1';
}
for(int j=1; j<n; j++) {
if(i < m/2) {
g[i][j] = g1[i][j-1];
} else {
g[i][j] = g1[m-1-i][j-1]; //m/2-1-(i-m/2)=m-1-i
}
}
}
}
return g;
}
public static void printGray(char[][] g) {
int m = g.length;
int n = g[0].length;
if(n <1) {
System.err.println("the number of n should larger than zero!");
return;
}
for(int i=0; i<m; i++){
for(int j=0; j<n; j++) {
System.out.print(g[i][j]);
}
System.out.println();
}
}
/**
* @param args
*/
public static void main(String[] args) {
printGray(gray(3));
}
}
分享到:
相关推荐
快速选择非递归与递归算法实现
java 用递归实现字符串反转 java 用递归实现字符串反转
用递归实现C#树形结构 ,用递归实现C#树形结构 ,
ackman函数的递归和非递归,学习数据结构的素材,非递归是使用堆栈实现的。
使用递归方法动态生成TreeView!,动态更改节点显示的图片!
最近不少面试问到格雷码的递归问题,写了个用递归方式实现格N位雷码的产生于输出,程序代码量很少,可以直接运行。可以下载看看。
递归方法实现斐波那契数列
分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。
阿克曼函数非递归实现,用到了堆栈,对于学习数据结构的人来说很有用
一个基于C#实现的递归法生成的树型菜单的程序源码。
用简短的JAVA代码使用递归算法生成随机不重复的双色球号码
C语言递归实现逆序程序 C语言初学者必会
二叉树的原理的理论 二叉树的遍历方法和递归实现算法的实现
主要介绍了MyBatis之自查询使用递归实现 N级联动效果,本文给大家分享两种实现方式,需要的的朋友参考下吧
使用递归方法生成连通树的matlab小程序,仅供参考,写出来还是比较简单
八皇后递归及非递归实现源码; 八皇后递归及非递归实现源码
递归实现回文判断
二叉树 非递归实现 数据结构 c++ 广度遍历,非递归实现广度遍历生成二叉树。 数据结构与算法上机作业。
汉诺塔的非递归实现,c++实现的,很简单,只有50多行,从递归的汉诺塔改编而来,将原来递归时的参数状态保存在栈中,入栈代替递归,出栈代替递归返回。
不用递归实现的无限级树型菜单,加载速度超快。