一个小编程题-递归方式生成N位格雷码

阅读更多
        今天群友发了一个小编程题,使用递归的方式生成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]

你可能感兴趣的:(一个小编程题-递归方式生成N位格雷码)