您当前的位置: 首页 >  leetcode

暂无认证

  • 3浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

leetcode:89格雷编码

发布时间:2020-07-31 20:09:46 ,浏览量:3

var make = function(n) { if (n === 0) return ['0'] if (n === 1) { return ['0', '1'] } else { let prev = make(n - 1) let max = Math.pow(2, n) - 1 let result = new Array(max) for (let i = 0; i < prev.length; i++) { result[i] = `0${prev[i]}` result[max-i] = `1${prev[i]}` } return result } }; var grayCode = function(n) { let binaryArr = make(n) return binaryArr.map(item => { return parseInt(item, 2) }) }; 

题目解析: 比如输入2,代表输出((两位))的二进制(格雷编码)所对应的十进制。注意,必须是以0开头的哈。0完了才是1的开始哈。 然后下面是找·规律。记住堆成的输出。

找规律: 在这里插入图片描述

输入1的时候,代表2的1次方。 输入2的时候,代表2的二次方。 输入3的时候,代表2的三次方。 而这些次方分成了两份,一份是0,一份是1. 0完了才是1的开始。 记住,n以n-1为基础的,3以2为基础,对称的,比如2的是00 01 11 10,00是3的第一个和最后一个,并且第一个前面加上0,后面是00.最后一个前面加上1.后面是00.以此类推。然后第二个是001,最后的第二个是101。。。。。。。。

let prev = make(n - 1) 

要想知道n得知道n-1.

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

看一看n多少次把,为什么-1.,因为从0开始的啊,数组。

for (let i = 0; i < prev.length; i++) { result[i] = `0${prev[i]}` result[max-i] = `1${prev[i]}` } 

第一位与最后,第二位与最后第二位。第三位与最后的第三位,第四位与最后的第四位。。。。

递归的哈。

var grayCode = function(n) { let binaryArr = make(n)//递归 return binaryArr.map(item => { return parseInt(item, 2)//然后存到map里面。把二进制item转换成十进制 }) }; 
关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.0830s