來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/gray-code
題目描述:
n 位格雷碼序列 是一個(gè)由 2n 個(gè)整數(shù)組成的序列晓折,其中:
每個(gè)整數(shù)都在范圍 [0, 2n - 1] 內(nèi)(含 0 和 2n - 1)
第一個(gè)整數(shù)是 0
一個(gè)整數(shù)在序列中出現(xiàn) 不超過一次
每對(duì) 相鄰 整數(shù)的二進(jìn)制表示 恰好一位不同 火焰,且
第一個(gè) 和 最后一個(gè) 整數(shù)的二進(jìn)制表示 恰好一位不同
給你一個(gè)整數(shù) n ,返回任一有效的 n 位格雷碼序列 唁情。
示例 1:
輸入:n = 2
輸出:[0,1,3,2]
解釋:
[0,1,3,2] 的二進(jìn)制表示是 [00,01,11,10] 啊终。
- 00 和 01 有一位不同
- 01 和 11 有一位不同
- 11 和 10 有一位不同
- 10 和 00 有一位不同
[0,2,3,1] 也是一個(gè)有效的格雷碼序列镜豹,其二進(jìn)制表示是 [00,10,11,01] 。 - 00 和 10 有一位不同
- 10 和 11 有一位不同
- 11 和 01 有一位不同
- 01 和 00 有一位不同
示例 2:
輸入:n = 1
輸出:[0,1]
代碼實(shí)現(xiàn):
class Solution {
public List<Integer> grayCode(int n) {
List<Integer> ans = new ArrayList<>();
ans.add(0);
while (n-- > 0) {
int m = ans.size();
for (int i = m - 1; i >= 0; i--) {
ans.set(i, ans.get(i) << 1);
ans.add(ans.get(i) + 1);
}
}
return ans;
}
}