您当前的位置: 首页 > 

宝哥大数据

暂无认证

  • 0浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

338. 比特位计数

宝哥大数据 发布时间:2019-11-10 14:41:08 ,浏览量:0

一、338. 比特位计数 1.1、题目描述

在这里插入图片描述

1.2.1、直接法: 根据191. 位1的个数(也被称为汉明重量)
class Solution:
    def countBits(self, num: int) -> List[int]:
        ans = [0] * (num+1) 
        for i in range(num+1):
            ans[i] = self.popCount(i)
        return ans
    def popCount(self, num: int) -> int:
        count = 0
        while num != 0:
            num = num & (num - 1)
            count += 1
        return count
1.2.2、根据奇偶性

在这里插入图片描述

class Solution:
    def countBits(self, num: int) -> List[int]:
        ans = [0] * (num+1) 
        for i in range(1, num+1):
            if i&1 == 0:# 偶数
                ans[i] = ans[i//2]
            else:       # 奇数
                ans[i] = ans[i-1] + 1
        return ans
  
1.2.3、优化: 右移+最低位(推荐)
class Solution:
    def countBits(self, num: int) -> List[int]:
        ans = [0] * (num+1) 
        for i in range(1, num+1):
            tmp = i&1
            ans[i] = ans[i>>2] + tmp
        return ans
  
1.2.4、动态规划 + 最后设置位

在这里插入图片描述

class Solution:
    def countBits(self, num: int) -> List[int]:
        ans = [0] * (num+1) 
        for i in range(1, num+1):
            ans[i] = ans[i & (i-1)] + 1
        return ans
  
关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0422s