在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序为从0开始。
测试样例:1
返回:[“0”,“1”]
- 递归思想
- 第n位的格雷码是由n-1位组成的
- 通过对第n-1位格雷码加“0”和加“1”组成的
- 比如:
- 第1位就是“0”,“1”
- 第2位就给第1位的首位加“0”和加“1”,“00”“01”“11”“10”
- 加1是从后往前加的原因是为了满足相邻两个只有一位不同的原则
代码示例:
import java.util.*;
public class GrayCode {
public String[] getGray(int n) {
//递归的截至条件
if(n == 1){
return new String[]{"0","1"};
}
// 递归求n-1位的格雷码
String[] s1 = getGray(n-1);
String[] s2 = new String[s1.length*2];
// 给s1首位加“0” 和 加”1“
for(int i = 0;i<s1.length;i++){
s2[i] = "0"+s1[i];
s2[i+s1.length] = "1"+s1[s1.length-i-1];
}
return s2;
}
}