格雷编码
难度:中等
观察规律,得出格雷编码的右半边数是左半边数镜像的二进制数左边补1时成立,例如当n=3时,我们已知n=2时有格雷编码(00,10,11,01)成立,那么,我们则需要对称的往右边添加(101[在01的左边补1,后面以此类推],111,110,100)即可,代码实现如下:
public List<Integer> grayCode(int n) {
List<Integer> res = new ArrayList<Integer>(){{add(0); }};
int head = 1;
for(int i = 0; i < n ; i++){
for(int j = res.size()-1;j>=0;j--){
res.add(res.get(j)+head);
}
head <<= 1;
}
return res;
}
执行结果:成功