生成格雷碼
在一組數的編碼中,若任意兩個相鄰的代碼只有一位二進制數不同, 則稱這種編碼爲格雷碼(Gray Code),請編寫一個函數,使用遞歸的方法生成N位的格雷碼。
給定一個整數n,請返回n位的格雷碼,順序爲從0開始。
測試樣例:
1
返回:["0","1"]
分析:
列出一組格雷碼:
000
001
011
010
110
111
101
100我們會發現除了最高位,其餘位的每一位上下對稱,像下面這樣:
由此我們可以遞歸出每一位,由上一層在每一位上加“0”或“1”並注意對稱即可,像這樣:
代碼:
public class GrayCode {
public String[] getGray(int n) {
String[] result = new String[(int)Math.pow(2,n)];
if(n == 1){
result[0] = "0";
result[1] = "1";
return result;
}
String[] last = getGray(n-1);
System.out.println(Arrays.toString(last));
for(int i=0; i<last.length; i++){
result[i] = "0"+last[i];
result[result.length-i-1] = "1"+last[i];
}
return result;
}
}