程序对Python中0到n范围内的所有数字的置位总数进行计数

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

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

  • res:=一个保存num + 10的数组

  • 偏移量:= 0

  • 对于范围在1到num + 1之间的

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

    • 否则将偏移量增加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
猜你喜欢