import java.util.*;
/**
* QQ1 生成格雷码
* @author d3y1
*/
public class GrayCode {
/**
* 模拟法
*
* 1位格雷码: 0 1
* 2位格雷码: (0)0 (0)1 (1)1 (1)0
* 3位格雷码: (0)00 (0)01 (0)11 (0)10 (1)10 (1)11 (1)01 (1)00
* ...
*
* 算法:
* n位格雷码 <== n-1位格雷码[加前缀0(顺序) + 加前缀1(逆序)]
*
* @param n
* @return
*/
public String[] getGray(int n) {
if(n == 1){
return new String[]{"0", "1"};
}
String[] preCodes = getGray(n-1);
int size = preCodes.length;
String[] codes = new String[size*2];
for(int i=0; i<size; i++){
// 加前缀0(顺序)
codes[i] = "0"+preCodes[i];
// 加前缀1(逆序)
codes[size+i] = "1"+preCodes[size-i-1];
}
return codes;
}
}