Description
The gray code is a binary numeral system where two successive values differ in only one bit.
Given an integer n representing the total number of bits in the code, return any sequence of gray code.
A gray code sequence must begin with 0.
Examples
Example 1:
Input: n = 2
Output: [0,1,3,2]
Explanation:
00 - 0
01 - 1
11 - 3
10 - 2
[0,2,3,1] is also a valid gray code sequence.
00 - 0
10 - 2
11 - 3
01 - 1
Example 2:
Input: n = 1
Output: [0,1]
Constraints:
1 <= n <= 16
解题思路
经过几个举例不难发现
n | grayCode |
---|---|
1 | 0, 1 |
2 | 0, 1, 1+2=3, 0+2=2 |
理由也不难发现
- 假设后面k位已经排序结束
- 那就可以写为 0xxx
- 对于下一位,将已排序的最后一位0xxx中开头的0改为1,后面不变
- 再接下去开头的1保持不变,其他的倒叙即可
那么对于1的处理用+ 2 k 2^k 2k就行
代码
class Solution {
public List<Integer> grayCode(int n) {
List<Integer> answer = new ArrayList<Integer>();
answer.add(0);
answer.add(1);
int times = 1;
for(int i = 2; i <= n; i++){
times = times << 1;
int num = answer.size();
for(int j = num - 1; j >= 0; j--){
answer.add(times + answer.get(j));
}
}
return answer;
}
}