1. 一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码( Gray Code )。请编写一个函数,使用递归方法生成 N 位的格雷码,并且保证这个函数的健壮性。
思路:产生n位元的所有格雷码。
格雷码:即GrayCode,是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同。
package tengxun; /** * 1.在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, * 则称这种编码为格雷码( Gray Code )。 * 请编写一个函数,使用递归方法生成 N 位的格雷码,并且保证这个函数的健壮性。 */ public class Test01GrayCode{ public static String[] grayCode(int n){ //产生2^n个格雷码 String[] graycode=new String[(int)Math.pow(2, n)]; if(n==1){ graycode[0]="0"; graycode[1]="1"; return graycode; } String[] last=grayCode(n-1); for(int i=0;i<last.length;i++){ graycode[i]="0"+last[i]; graycode[graycode.length-1-i]="1"+last[i]; } return graycode; } }
package tengxun; import java.util.Arrays; import org.junit.Test; public class Test01GrayCodeTest { @Test public void test1() { int n=3; String[] graycode=Test01GrayCode.grayCode(n); System.out.println(Arrays.toString(graycode)); } @Test public void test2() { int n=4; String[] graycode=Test01GrayCode.grayCode(n); System.out.println(Arrays.toString(graycode)); } }