zoukankan      html  css  js  c++  java
  • b_lc_连接连续二进制数字(连接相当于左移然后异或)

    给你一个整数 n(1<=1e5),请你将 1 到 n 的二进制表示连接起来,并返回连接结果对应的 十进制 数字对 10^9+7 取余的结果。

    思路:暴力

    class Solution:
        def concatenatedBinary(self, n: int) -> int:
            ans=''
            mod=int(1e9+7)
            for i in range(n+1):
                ans=ans+bin(int(i)%mod)[2:]
            return int(ans,2)%mod
    

    二进制思路:二进制数a、b的连接相当于a左移(cnt_2(b))位,在异或上b,公式为:x=(x<<cnt(i))+i),而只有i是2的次幂数,左移的位数才会增加1,否则它会以当前最大2的次幂数的位数为基准

    class Solution:
        def concatenatedBinary(self, n: int) -> int:
            x,k,mod=0,0,int(1e9+7)
            for i in range(1,n+1):
                if (i&(i-1))==0: k+=1
                x=((x<<k)|i)%mod;
            return x
    
  • 相关阅读:
    简单状态机
    c语言状态机
    存储公司
    正确跑步
    好好做自己能做的
    I2C学习
    es6 generator函数
    es6 for of 循环
    es6 proxy代理
    es6 Symbol类型
  • 原文地址:https://www.cnblogs.com/wdt1/p/14095812.html
Copyright © 2011-2022 走看看