在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。
给定一个整数n,请返回n位的格雷码,顺序为从0开始。
测试样例:
1
返回:[“0”,”1”]
/**
* 获得n-1位生成格雷码的数组
* 由于n位生成的格雷码位数是n-1的两倍,故只要在n为格雷码的前半部分加0,后半部分加1即可。
* Created by ustc-lezg on 16/4/7.
*/
public class Solution {
public static void main(String[] args) {
String[] res = getGray(1);
for (String str : res) {
System.out.println(str);
}
}
public static String[] getGray(int n) {
int gclen = 1 << n;
System.out.println(gclen);
String[] grayCode = new String[gclen];
if (n == 1) {
grayCode[0] = "0";
grayCode[1] = "1";
return grayCode;
}
String[] lgc = getGray(n - 1);
for (int i = 0, len = lgc.length; i < len; i++) {
grayCode[i] = "0" + lgc[i];
grayCode[gclen - i - 1] = "1" + lgc[i];
}
return grayCode;
}
}