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; } }