用递归实现生成Gray码的算法
来源:互联网 发布:线缆测试仪福禄克网络 编辑:程序博客网 时间:2024/06/07 12:43
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)
如:
当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));}}
- 用递归实现生成Gray码的算法
- Gray码的递归与非递归C++实现
- Gray码的生成算法(直接由二进制数转格雷码)
- 用反射Gray码的顺序生成0,1的n元组的算法
- 生成排列的非递归实现算法
- 递归5: 生成置换的递归与STL算法实现
- Gray码生成
- 递归——生成格雷码(gray code)
- 构造Gray码的分治算法
- 递归算法+奇妙规律 89. Gray Code
- 用递归和穷举法实现的循环赛赛程生成算法
- 彩票生成的递归算法
- 算法学习 - Gray Code(格雷码)的解释和c++实现
- Java 递归实现格雷码(Gray Code)
- 以反射Gray码的顺序生成0,1的n元组的算法-组合数学
- 格雷码(Gray Code)的生成
- leetcode 89. Gray Code 按照index递归解决 + Grey码生成公式
- 生成树的递归实现
- 快速排序之我见
- Baidu 手写中序遍历二叉树非递归 和 链栈 【面】
- 结构体字节对齐
- 旧工程适配iOS6和iPhone5续之第三方静态库
- 二叉查找树相关算法实现(算法导论12章)
- 用递归实现生成Gray码的算法
- SpaceWalk安装(一) postgresql 安装
- HTML_06(Dom(03))
- Gof设计模式(一)引言
- 二叉查找树 (算法导论12)
- apache 集成多个tomcat的方法
- cloudera源码下载
- Hdu 2027 - 统计元音
- poj1503