LeetCode 89. 格雷编码
题目描述
✅ 89. 格雷编码
思路分析
解法一:公式法(推荐)
核心思路:
- 第
i个格雷码为i ^ (i >> 1)。- 直接枚举
0..2^n-1生成序列。- 相邻两数只会有一位不同。
复杂度分析:
- 时间复杂度:O(2^n),生成全部格雷码。
- 空间复杂度:O(2^n),存储结果序列。
class Solution {
public List<Integer> grayCode(int n) {
int size = 1 << n;
List<Integer> res = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
// 公式 i ^ (i >> 1)
res.add(i ^ (i >> 1));
}
return res;
}
}
func grayCode(n int) []int {
size := 1 << n
res := make([]int, 0, size)
for i := 0; i < size; i++ {
// 公式 i ^ (i >> 1)
res = append(res, i^(i>>1))
}
return res
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 1238. 循环码排列 | 中等 | 格雷码 |
| 89. 格雷编码 | 中等 | 位运算 |
| 191. 位 1 的个数 | 简单 | 位运算 |
| 231. 2 的幂 | 简单 | 位运算 |
| 268. 丢失的数字 | 简单 | 位运算 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!