假设我们有一个数字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