Python程序:计算0到n范围内所有数字的集合位总数


假设我们有一个数字num。对于0 ≤ i ≤ num范围内的每个数字i,我们必须计算其二进制对应物中1的个数,并将它们作为列表返回。因此,如果数字是5,则数字为[0, 1, 2, 3, 4, 5],这些数字中1的个数为[0, 1, 1, 2, 1, 2],所以它将返回7。

为了解决这个问题,我们将遵循以下步骤:

  • res := 一个包含num + 1个0的数组

  • offset := 0

  • 对于范围1到num + 1中的i

    • 如果i和i - 1 = 0,则res[i] := 1且offset := 0

    • 否则,将offset增加1,res[i] := 1 + res[offset]

  • 返回res元素的总和

让我们看下面的实现来更好地理解:

示例

 在线演示

class Solution:
   def countBits(self, num):
      result = [0] * (num+1)
      offset = 0
      for i in range(1,num+1):
         if i & i-1 == 0:
            result[i] = 1
            offset = 0
         else:
            offset+=1
            result[i] = 1 + result[offset]
      return sum(result)
ob1 = Solution()
print(ob1.countBits(5))

输入

5

输出

7

更新于:2020年10月21日

143 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.