kniost

谁怕,一蓑烟雨任平生

0%

LeetCode 89. Gray Code

89. Gray Code

Difficulty: Medium

The gray code is a binary numeral system where two successive values differ in only one bit.

Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

Example 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Input: 2
Output: [0,1,3,2]
Explanation:
00 - 0
01 - 1
11 - 3
10 - 2

For a given n, a gray code sequence may not be uniquely defined.
For example, [0,2,3,1] is also a valid gray code sequence.

00 - 0
10 - 2
11 - 3
01 - 1

Example 2:

1
2
3
4
5
Input: 0
Output: [0]
Explanation: We define the gray code sequence to begin with 0.
A gray code sequence of n has size = 2n, which for n = 0 the size is 20 = 1.
Therefore, for n = 0 the gray code sequence is [0].

Solution

Language: Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution {
public List<Integer> grayCode(int n) {
List<Integer> result = new ArrayList<>();
result.add(0);
if (n == 0) {
return result;
}
boolean[] visited = new boolean[1 << n];
visited[0] = true;
dfsHelper(result, visited, n);
return result;
}

private boolean dfsHelper(List<Integer> result, boolean[] visited, int n) {
if (result.size() == (1 << n)) {
return true;
}
int last = result.get(result.size() - 1);
int cur = last;
for (int i = 0; i < n; i++) {
cur = last ^ (1 << i);
if (!visited[cur]) {
result.add(cur);
visited[cur] = true;
if (dfsHelper(result, visited, n)) {
return true;
}
visited[cur] = false;
result.remove(result.size() - 1);
}
}
return false;
}
}