Given 2 integers n
and start
. Your task is return any permutation p
of (0,1,2.....,2^n -1)
such that :
p[0]
=start
p[i]
andp[i+1]
differ by only one bit in their binary representation.p[0]
andp[2^n -1]
must also differ by only one bit in their binary representation.
Example 1:
1 | Input: n = 2, start = 3 |
Example 2:
1 | Input: n = 3, start = 2 |
Constraints:
1 <= n <= 16
0 <= start < 2 ^ n
题目所求序列是一个 格雷码
序列, 相邻的二进制只有一位不同(有效位数), 首尾同样只有一位不同题目虽然给出了开始位置, 但其实就是一个循环, 找到一个循环序列即可.
格雷码生成公式
格雷码生成公式: [i] = i^(i>>1) 自己与自己左移一位相异或
i | i | i >> 1 | [i] | [i] |
---|---|---|---|---|
0 | 000 | 000 | 000 | 0 |
1 | 001 | 000 | 001 | 1 |
2 | 010 | 001 | 011 | 3 |
3 | 011 | 001 | 010 | 2 |
4 | 100 | 010 | 110 | 6 |
5 | 101 | 010 | 111 | 7 |
6 | 110 | 011 | 101 | 5 |
7 | 111 | 011 | 100 | 4 |
题解:
1 | class Solution { |