老师,你这个代码最后是怎么把十进制转化为2进制,是用parseInt(x,2)吗,但是我为啥还是转化不成功

来源:3-9 格雷编码-代码演示

慕村4810629

2019-05-20

 let make = (n) => {
if (n === 1) {
  return ['0', '1']
} else {
  let prev = make(n - 1)
  let result = []
  let max = Math.pow(2, n) - 1
  for (let i = 0, len = prev.length; i < len; i++) {
    result[i] = `0${prev[i]}`
    result[max - i] = `1${prev[i]}`
  }
  return result
}

}
for (let j = 0; j < Math.pow(2, n) - 1 - 1; j++) {
make[n] = parseInt(make[n], 2);
}
return make(n)

写回答

3回答

布罗利00

2020-03-17

const make = n => {
  if (n === 0) return [0]
  if (n === 1) {
    return ['0', '1']
  } else {
    const prev = make(n - 1)
    const max = Math.pow(2, n) - 1 // 最后一项索引值
    const result = []
    for (let i = 0, len = prev.length; i < len; i++) {
      result[i] = `0${prev[i]}` // 对称索引 0 1
      result[max - i] = `1${prev[i]}` // 对称索引 3 2
    }
    return result
  }
}

const grayCode = n => {
  const binaryCode = make(n)
  // 二进制转十进制
  return binaryCode.map(item => parseInt(item, 2))
}

console.log(grayCode(2))


0
0

nkliyc

2019-06-16

export default (n) => {

if(n === 0) {

return [0]

}

let make = (n) => {

if(n === 1) {

return ['0', '1']

} else {

let pre = make(n - 1)

let max = Math.pow(2, n) -1

let result = []

for(let i = 0, len = pre.length; i < len; i++) {

result[i] = `0${pre[i]}`

result[max - i] = `1${pre[i]}`

}

return result

}

}

let binaryToDecimal = (binStr) => {

let decimal = 0

for(let i=0, len = binStr.length; i < len; i++) {

decimal += parseInt(binStr[i]) * Math.pow(2, len - 1 - i)

}

return decimal

}

return make(n).map(item => binaryToDecimal(item))

}


0
0

快乐动起来呀

2019-05-22

这里的二进制不是通过十进制转换的,你看看是从 0,1开始,然后变成00,10这种二进制,仔细看下代码就理解了,也可以console.log每个变量

0
0

JavaScript版 数据结构与算法

填补前端同学的算法短板,掌握面试中最常见的算法与数据结构

2467 学习 · 395 问题

查看课程