89. 格雷编码
webVueBlog opened this issue · 0 comments
webVueBlog commented
/**
- @param {number} n
- @return {number[]}
*/
// 二进制数转格雷码
// var grayCode = function(n) {
// const ret = []
// for (let i = 0; i < 1 << n; i++) {
// ret.push((i >> 1) ^ i)
// }
// return ret
// };
// 递归版
// var grayCode = function(n) {
// if (n === 0) return [0]
// if (n === 1) return [0, 1]
// let add = 1 << (n-1)
// let lastStatus = grayCode(n - 1)
// let res = [...lastStatus]
// for (let i = lastStatus.length - 1; i >= 0; i--) {
// res.push(lastStatus[i] + add)
// }
// return res
// }
var grayCode = function(n) {
let ans = [0]
let pre = 1
for (let i = 0; i < n; i++) {
for (let j = ans.length - 1; j >= 0; j--) {
ans.push(pre + ans[j])
}
pre <<= 1
}
return ans
}