【题目描述】
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。
给定一个整数n,请返回n位的格雷码,顺序为从0开始。
测试样例:
1
返回:[“0”,“1”]
分析:
- 递归:递归的思路就是n为的gray码是由n-1位的gray码生成
①比如求n=3的gray码,首先知道n=2的gray码是(00,01,11,10)
②那么n=3的gray码其实就是对n=2的gray码首位添加0或1生成的
③添加0后变成(000,001,011,010)
④添加1后变成(110,111,101,100),此时需要发反向就变成啦(110,111,101,100)
⑤组合在一起就是(000,001,011,010,110,111,101,100)
public class Main01 {
public String[] getGray(int n) {
// write code here
String resStr[]=null;
if(n==1){
resStr=new String[]{"0","1"};//数组的初始化
}else {
String[] str=getGray(n-1);
resStr=new String[2*str.length];
for (int i = 0; i <str.length ; i++) {
//加0加1操作同时进行
resStr[i]="0"+str[i];//加0时从前往后遍历
resStr[resStr.length-i-1]="1"+str[i];//加1时从后往前遍历
}
}
return resStr;
}
public static void main(String[] args) {
}
}