-
Notifications
You must be signed in to change notification settings - Fork 24
/
0089-gray-code.js
61 lines (44 loc) · 1.36 KB
/
0089-gray-code.js
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// 89. Gray Code
// Medium 41%
// 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.
// For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:
// 00 - 0
// 01 - 1
// 11 - 3
// 10 - 2
// Note: For a given n, a gray code sequence is not uniquely defined.
// For example, [0,2,3,1] is also a valid gray code sequence according to the
// above definition.
// For now, the judge is able to judge based on one instance of gray code
// sequence. Sorry about that.
/**
* @param {number} n
* @return {number[]}
*/
const grayCode = function(n) {
if (n < 0) return []
const res = [0]
for (let i = 0; i < n; i++) {
res.push(...[...res].reverse().map(v => v + (1 << i)))
}
return res
}
;[
4,
2,
0,
].forEach(n => {
console.log(grayCode(n))
})
// Solution:
// 0 --(逆序)--> 0 --(+1)--> 1 --(插入原数组末尾)-->
// 0 1 --(逆序)--> 1 0 --(+10)--> 11 10 --(插入原数组末尾)-->
// 00 01 11 10 --(逆序)--> 10 11 01 00 --(+100)--> 110 111 101 100 --(插入原数组末尾)-->
// 1. 取原数组 a 的逆序, b
// 2. b 中每个数值加上 2^(log(b.length) + 1)
// 3. b 加到 a 的末尾
// Submission Result: Accepted