当前位置: 代码迷 >> 综合 >> 【leecode 剑指offer】连接连续二进制数字
  详细解决方案

【leecode 剑指offer】连接连续二进制数字

热度:33   发布时间:2023-11-22 21:21:50.0

连接连续二进制数字

给你一个整数 n ,请你将 1 到 n 的二进制表示连接起来,并返回连接结果对应的 十进制 数字对 109 + 7 取余的结果。
在这里插入图片描述

解题思路

对于第n个数和前n-1个数连接之后的数值sum,将n转成二进制字符串,假定长度为k,sum需要整体左移k个长度,就是乘以Math.pow(2,k),所以一次遍历就完成了,注意每次取余即可。

代码展示

/*** @param {number} n* @return {number}*/
var concatenatedBinary = function(n) {
    var mod=1000000007;//模var res=0;var shift=0;//记录当前数据的二进制位数for(let i=1;i<=n;i++){
    if(!(i&(i-1))){
    //当是2的幂级数时位数加一++shift;}res = (( res * Math.pow(2,shift))+ i ) % mod;//左移shift位后加上当前数,左移n位相当于乘以2的n次}return res;
};
  相关解决方案