1、详细分析
我们先看一串1位格雷码、2位格雷码、3位格雷码的结果:
0
1
00
01
11
10
000
001
011
010
110
111
101
100
可以知道:2位格雷码是由1位格雷码前面加0和1,并且是除了第一位其他位都对称
3位格雷码是由2位格雷码前面加0和1,并且是除了第一位其他位都对称
因此可以用到递归:n位格雷码【i】="0"+n-1位格雷码【i】
n为格雷码【2^n-i-1】=“1”+n-1位格雷码【i】
从而我们得到下面程序:
package geleima;
import java.util.Scanner;
public class NtoGram {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
String []result=new NtoGram().grayMard(n);
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
public String[] grayMard(int n){
String []strings=new String[(int)Math.pow(2,n)];
if(n==1){
strings[0]="0";
strings[1]="1";
return strings;
}
String []resulStrings=grayMard(n-1);
for(int i=0;i<resulStrings.length;i++){
strings[i]="0"+resulStrings[i];
strings[strings.length-i-1]="1"+resulStrings[i];
}
return strings;
}
}