构造N位格雷码(递归,面向对象)
问题:
递归打印出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;
}
}

构造N位格雷码(递归,面向对象)的更多相关文章
- 求解n位格雷码
/************************************************************************* > File Name: Gray.cpp ...
- gray code 格雷码 递归
格雷码 the n-1 bit code, with 0 prepended to each word, followd by the n-1 bit code in reverse order, w ...
- 构建n位元的格雷码
二进制格雷码的生成 1.什么是格雷码 Gray Code是一个数列集合,每个数使用二进制来表示,假设使用n位元来表示每个数字,那么任两个数之间只有一个位元值不同.log2(16)=4 例如: 生成4位 ...
- C语言输出格雷码
格雷码是以n位的二进制来表示数. 与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同. 首尾两个数字也要求只有1位之差. 有很多算法来生成格雷码.以下是较常见的一种: 从编码全0开始生成 ...
- Gray Code - 格雷码
基本概念 格雷码是一种准权码,具有一种反射特性和循环特性的单步自补码,它的循环.单步特性消除了随机取数时出现重大误差的可能,它的反射.自补特性使得求反非常方便.格雷码属于可靠性编码,是一种错误最小化的 ...
- LeetCode 格雷码序列的生成
问题概述:在一组数的编码中,若随意两个相邻的代码仅仅有一位二进制数不同.则称这样的编码为格雷码. 2位数的格雷码序列:00 : 001 : 111 : 310 : 2找规律:假设要求n位的格雷码,先要 ...
- 2019CSP day1t1 格雷码
题目描述 通常,人们习惯将所有 \(n\) 位二进制串按照字典序排列,例如所有 \(2\) 位二进制串按字典序从小到大排列为:\(00,01,11,10\). 格雷码(\(Gray Code\))是一 ...
- [CSP-S 2019]格雷码
[CSP-S 2019]格雷码 题目大意: 格雷码(Gray Code)是一种特殊的 \(n\) 位二进制串排列法,它要求相邻的两个二进制串间恰好有一位不同,特别地,第一个串与最后一个串也算作相邻. ...
- 【解题报告】CSP2019-S D1T1 格雷码
题目链接:https://www.luogu.org/problem/P5657 话说这道题怎么是道橙题啊. 基本思路 因为n位格雷码的前2n-1位就是n-1位格雷码前面加了一位‘0’,所以可以把它们 ...
随机推荐
- php实现监控在线服务应用程序小栗子
下面我就给大家举个栗子(例子) 某单位需要实现监控服务器状态,和监控服务器应用网站,还有需要监控服务器的中间件,数据库状态监控.听到这个任务是不是恨透头疼,这想起来是不是头疼.还好有系统可用,但是我现 ...
- 关于ls命令的实例
生活映射程序---------科技创造生活 ls 是Linux的常用命令之一直接使用 ls 命令的话只会列出对应的文件名ls -l 命令会显示文件和目录,包括文件类型,大小,修改日期和时间,权限信息等 ...
- JavaScript ES6 Arrow Functions(箭头函数)
1. 介绍 第一眼看到ES6新增加的 arrow function 时,感觉非常像 lambda 表达式. 那么arrow function是干什么的呢?可以看作为匿名函数的简写方式. 如: var ...
- javascript 类数组对象
原文:https://segmentfault.com/a/1190000000415572 定义: 拥有length属性,其他属性(索引)为非负整数(对象中的所有会被当做字符串来处理,这里你可以当做 ...
- 转-Windows路由表配置:双网卡路由分流
原文链接:http://www.cnblogs.com/lightnear/archive/2013/02/03/2890835.html 一.windows 路由表解释 route print -4 ...
- junit--eclipse插件
现在比较火的IDE是JIDE,但是我一直在使用eclipse.对eclipse比较熟悉了,也有了感情了.这里就以eclipse为例,来整理下eclipse中junit插件的使用. 添加junit包到自 ...
- IO (五)
1 序列化和反序列化 1.1 ObjectOutputStream 序列化 1.1.1 概述 ObjectOutputStream将Java对象的基本数据写入OutputStream,可以使用Obje ...
- MySQL权限详解
MySQL权限级别介绍 MySQL权限级别 全局性的管理权限,作用于整个MySQL实例级别 数据库级别的权限,作用于某个指定的数据库上或者所有的数据库上 数据库对象级别的权限,作用于指定的数据库对象上 ...
- 各模拟器adb连接端口
如果执行自动化测试,在没有真机的情况下,我们唯一的选择便是模拟器.目前市面上有很多模拟器,他们使用adb连接时都会有不同的默认接口,当adb无法自动连接模拟器时,手动使用ip+端口连接是很好的选择.下 ...
- 常用的几个PHP加密函数
1.前言 PHP加密方式分为单项散列加密,对称加密,非对称加密这几类. 像常用的MD5.hash.crypt.sha1这种就是单项散列加密,单项散列加密是不可逆的. 像URL编码.base64编码这种 ...