今天群友发了一个小编程题,使用递归的方式生成N位格雷码。
首先了解了一下格雷码及其递归思路,但写起来还是调试了很久。
代码如下:
运行一下:
结果如下:
首先了解了一下格雷码及其递归思路,但写起来还是调试了很久。
代码如下:
public static String[] createGrayCode(int n){
String[] codes = new String[2 << (n - 1)];
createGrayCode(codes, n);
return codes;
}
private static void createGrayCode(String[] codes, int n){
if(n == 1){
codes[0] = "0";
codes[1] = "1";
}else{
createGrayCode(codes, n - 1);
int len = 2 << (n - 1);
int half = len >> 1;
for(int i = len - 1,j = 0; i >= 0; i--){
if(i < half){
codes[i] = "0" + codes[--j];
}else{
codes[i] = "1" + codes[j++];
}
}
}
}
运行一下:
public static void main(String[] args) {
String[] codes = createGrayCode(3);
System.out.println(Arrays.toString(codes));
}
结果如下:
[000, 001, 011, 010, 110, 111, 101, 100]