假设我们有一个非负整数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]
返回资源
让我们看下面的实现以更好地理解-
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]