The gray code is a binary numeral system where two successive values differ in only one bit.
Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.
For example, given n = 2, return [0,1,3,2]
. Its gray code sequence is:
00-0 01-1 10-2 11-3
这道题目要求计算格雷码,输出对应的十进制数字,难度为中等,不过实现起来还是很简单的。
public class Solution {
public List<Integer> grayCode(int n) {
if (n == 0) {
List<Integer> list = new ArrayList<Integer>();
list.add(0);
return list;
}
if (n == 1) {
List<Integer> list = new ArrayList<Integer>();
list.add(0);
list.add(1);
return list;
}
List<Integer> grayM = grayCode(n - 1);
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < Math.pow(2,n); i++) {
if (i < Math.pow(2, n-1)) { //前面一半的数字不变
list.add(grayM.get(i));
} else { //后面一半的数字反向排列,再在前面添加一个‘1’
int res = grayM.get( (int)Math.pow(2, n) - i - 1 ) + (int)Math.pow(2, n - 1);
list.add(res);
}
}
return list;
}
}