今天群友发了一个小编程题,使用递归的方式生成N位格雷码。
首先了解了一下格雷码及其递归思路,但写起来还是调试了很久。
代码如下:
public static String[] createGrayCode(int n){
String[] codes = new String[2 << (n - 1)];
createGrayCode(codes, n);
return codes;
}
private static void createGrayCode(String[] codes, int n){
if(n == 1){
codes[0] = "0";
codes[1] = "1";
}else{
createGrayCode(codes, n - 1);
int len = 2 << (n - 1);
int half = len >> 1;
for(int i = len - 1,j = 0; i >= 0; i--){
if(i < half){
codes[i] = "0" + codes[--j];
}else{
codes[i] = "1" + codes[j++];
}
}
}
}
运行一下:
public static void main(String[] args) {
String[] codes = createGrayCode(3);
System.out.println(Arrays.toString(codes));
}
结果如下:
[000, 001, 011, 010, 110, 111, 101, 100]
分享到:
相关推荐
n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---...
(为方便查看,在每个格雷码内,两个位之间用一个空格隔开,如,00输出为:0 0)。两个测试例的输出数据之间用一个空行隔开,最后一个测试例后无空行。 3. 测试数据 输入:2 4 5 输出:0 0 0 0 0 0 0 1 0 0 1 1 0 ...
嵌入式C语言培训-C编程基础-递归函数视频教程,需要的朋友可以下载一下。
完整课程设计及源码,源码格雷码问题递归算法设计和实验
最近不少面试问到格雷码的递归问题,写了个用递归方式实现格N位雷码的产生于输出,程序代码量很少,可以直接运行。可以下载看看。
NOIP普及讲座1-递归与分治(C++版).pdf
利用递归生成格雷码的算法。算法简单明了。
Enter the x-coordinate of the empty cell (0-3): 3 Enter the y-coordinate of the empty cell (0-3): 0 就是只要我输入X-Y坐标,就出下面的东西 0 1 2 3 --------- 0|B B C 1|B A C C 2|E A A D ...
格雷码产生的程序有不少,有递归实现的,但是其实只要两个操作,就能产生: 一个是右移 一个是异或 本程序十分简单的就产生了格雷码,值得一看
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1. 递归,面向过程编程,简单直接 2. 面向对象编程,...
大师叫你不再害怕 ----递归 大师叫你不再害怕 ----递归 大师叫你不再害怕 ----递归
(为方便查看,在每个格雷码内,两个位之间用一个空格隔开,如,00输出为:0 0)。两个测试例的输出数据之间用一个空行隔开,最后一个测试例后无空行。 测试数据 输入:2 4 5 输出:0 0 0 0 0 0 0 1 0 0 1 1 0 0 ...
n的阶乘-递归方法.txt
编译原理-递归子程序 c++源码 编译原理-递归子程序 c++源码 编译原理-递归子程序 c++源码
递归算法的基本思想是将一个大问题分解成若干个小问题,然后递归地解决这些小问题,最终将它们合并成一个解决方案。递归算法通常使用递归函数来实现,递归函数是一种可以调用自身的函数。 递归算法的实现需要注意...
遍历递归的先中後序, 非递归的先中後序, 计算出深度 结点数 /* 运行结果: ------------------------ 请先序输入二叉树(如:ab三个空格表示a为根节点,b为左子树的二叉树) ab c 先序递归遍历二叉树: a b c 先序...
编译原理课程设计---递归下降分析程序的实现
这是一个学习ASP.NET treeview控件的demo,通过递归生成一棵部门树。部门表结构在解决方案中。解压密码: 1435279215
只是鄙人c++初学的傻瓜式代码(至于格雷码是什么,请自行上网百度)
基于深度卷积-递归神经网络的手绘草图识别方法.pdf