class Solution(object):
def countBits(self, num):
"""
1: 0001 3: 0011 0: 0000
2: 0010 6: 0110 1: 0001
4: 0100 12: 1100 2: 0010
8: 1000 24: 11000 3: 0011
16:10000 48: 110000 4: 0100
32:100000 96: 1100000 5: 0101
由上可见:
1、如果 i 为偶数,那么f(i) = f(i/2) ,因为 i/2 本质上是i的二进制左移一位,低位补零,所以1的数量不变。
2、如果 i 为奇数,那么f(i) = f(i - 1) + 1, 因为如果i为奇数,那么 i - 1必定为偶数,而偶数的二进制最低位一定是0,
那么该偶数 +1 后最低位变为1且不会进位,所以奇数比它上一个偶数bit上多一个1,即 f(i) = f(i - 1) + 1。
"""
dp = [0]
for i in range(1, n+1):
if i%2==1:
dp.append(dp[i-1]+1)
else:
dp.append(dp[i//2])
return dp
找规律呀,找规律~
猜你喜欢:👇🏻
⭐【Leetcode】背包问题模板
⭐【Leetcode】那些年四数之和下的评论
⭐【Leetcode】组合、排列、子集、切割(回溯模板和去重方法)