用Python计算位数

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

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

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

  • 偏移量:= 0

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

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

    • 否则将偏移量增加1,然后res [i]:= 1 + res [offset]

  • 返回资源

示例(Python)

让我们看下面的实现以更好地理解-

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 result
ob1 = Solution()print(ob1.countBits(6))

输入项

6

输出结果

[0, 1, 1, 2, 1, 2, 2]