题目:给出一个整数n,返回n位数格雷码的序列。gray code中文名叫格雷码
例子:以n=2为例:
00 - 0
01 - 1
11 - 3
10 - 2
返回包含0,1,3,2的List。
题解:典型的模拟题,我们可以多写几个例子出来找规律。n=3时:
0 0 0 - 0
0 0 1 - 1
0 1 1 - 3
0 1 0 - 2
1 1 0 - 6
1 1 1 - 7
1 0 1 - 5
1 0 0 - 4
可以看到由四位变到八位时,
6 = 2 + 4;
7 = 3 + 4;
5 = 1 + 4;
4 = 0 + 4;
即格雷码的镜面性质:n位元的格雷码可以从n-1位元的格雷码以上下镜射后加上新位元的方式快速的得到:
因此就不难写出代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.GrayFilter;
class Solution {
public static List<Integer> grayCode(int n) {
List<Integer> list = new ArrayList<Integer>();
list.add(0);
for(int i = 0; i < n; i++){
int len = (int) Math.pow(2, i);
for(int j = len - 1; j >= 0; j--){
int gray = list.get(j) + len;
list.add(gray);
}
}
return list;
}
public static void main(String[] args) {
// System.out.println(Math.pow(2, 4));
System.out.println(grayCode(3));
}
}