1680. Concatenation of Consecutive Binary Numbers - cocoder39/coco39_LC GitHub Wiki

1680. Concatenation of Consecutive Binary Numbers

get the low bit x & (-x) (eg, 0b100100 -> 0b100, 0b101 -> 0b1)

  • x = 0b1, x & (-x) = 0b1
  • x = 0b10, x & (-x) = 0b10
  • x = 0b11, x & (-x) = 0b1
class Solution:
    def concatenatedBinary(self, n: int) -> int:
        MOD = 10**9 + 7
        
        sum = 0
        shift = 0
        for i in range(1, n + 1):
            if i & (-i) == i:
                shift += 1
            sum = ((sum << shift) + i) % MOD
        return sum