格雷码问题:
对于给定的正整数n,格雷码为知足以下条件的一个编码序列:
(1) 序列由2n个编码组成,每一个编码都是长度为n的二进制位串。
(2) 序列中无相同的编码。
(3) 序列中位置相邻的两个编码恰有一位不一样。
例如:n=1时的格雷码为:{0, 1}。
n=2时的格雷码为:{00, 01, 11, 10}。
n=3时的格雷码为:{000, 001, 011, 010,110,111,101,100}。
gray码问题求解思想:
将一个规模n位gray码序列表示为G(n), G(n)以相反顺序排列的序列表示为G’(n)。则gray码的构造规则即子问题的划分规则为:G(n+1)= 0G(n) 1G’(n) 。
gray码问题代码:G(n+1)= G(n) 0G’(n)1java
这是用java实现
package digui;
import java.util.Scanner;
public class digui {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n=in.nextInt();
System.out.println("————————————————递归实现格雷码问题————————————");
String[] strArr=GrayCode(n);
for(int i=0;i<strArr.length;i++)
{
System.out.println(strArr[i]);
}
}
public static String[] GrayCode(int n){
String[] grayCodeArr = new String[(int)Math.pow(2,n)];
if(n<1)
{
System.out.println("你输入的格雷码有错误!");
}
if(n==1)
{
grayCodeArr[0]="0";
grayCodeArr[1]="1";
return grayCodeArr;
}
String[] before = GrayCode(n-1);ide
for(int i=0;i<before.length;i++){ grayCodeArr[i]="0"+before[i]; grayCodeArr[grayCodeArr.length-1-i]="1"+before[i]; } return grayCodeArr; }
}ui