文章

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

在 LeetCode 查看

本文由作者按照 CC BY 4.0 进行授权