无名 发表于 2022-5-8 18:40:28

【HC】比特位计数


一、338. 比特位计数1.1、题目描述http://cdn.u1.huluxia.com/g3/M03/38/FE/wKgBOV3JQvCAUSsTAADgAIHUhFA174.jpg
1.2.1、直接法: 根据191. 位1的个数(也被称为汉明重量)class Solution:    def countBits(self, num: int) -> List:      ans = * (num+1)         for i in range(num+1):            ans = self.popCount(i)      return ans    def popCount(self, num: int) -> int:      count = 0      while num != 0:            num = num & (num - 1)            count += 1      return count1.2.2、根据奇偶性http://cdn.u1.huluxia.com/g3/M03/38/FE/wKgBOV3JQvGAOtUyAADQAMXD-As195.jpg
class Solution:    def countBits(self, num: int) -> List:      ans = * (num+1)         for i in range(1, num+1):            if i&1 == 0:# 偶数                ans = ans            else:       # 奇数                ans = ans + 1      return ans123456789101.2.3、优化: 右移+最低位(推荐)class Solution:    def countBits(self, num: int) -> List:      ans = * (num+1)         for i in range(1, num+1):            tmp = i&1            ans = ans + tmp      return ans1.2.4、动态规划 + 最后设置位http://cdn.u1.huluxia.com/g3/M03/38/FE/wKgBOV3JQvGAEGzbAABMAM7o64w674.jpg
class Solution:    def countBits(self, num: int) -> List:      ans = * (num+1)         for i in range(1, num+1):            ans = ans + 1      return ans
页: [1]
查看完整版本: 【HC】比特位计数