89. 格雷编码
问题89 格雷编码 ★★☆☆☆
https://leetcode-cn.com/problems/gray-code/
这个题目本质上还是位操作,关键点是如果我们有了n-1位的格雷编码,如何得到n位的格雷编码呢?顺序遍历挨个高位补一位二进制位0,结果和n-1位的格雷编码一样。接着,倒序遍历挨个高位补一位二进制位1,并追加到n-1位格雷编码的末尾。可以推断,这样得到的结果是符合要求的格雷编码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public List<Integer> grayCodeV2(int n) {
assert n >= 1 && n <= 16;
List<Integer> res = new ArrayList<>();
res.add(0);
for (int i = 0; i < n; i++) {
int op = 1 << i;
int len = res.size();
for (int j = len-1; j >= 0; j--) {
res.add(res.get(j) | op);
}
}
return res;
}
本文由作者按照 CC BY 4.0 进行授权