首页 > 编程源码 > 比特位计数

比特位计数

楼主:可乐 [3级] · 2019-11-11 ·  浏览478 · 编程源码 · ID:

一、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 count1.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 123456789101.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 ans1.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
- 版权声明 - 1、本帖所有言论和图片等纯属网友个人意见,与流星社区立场无关;
2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者可乐流星社区的同意;
3、备注原文地址:https://bbs.liuxingw.com/t/17031.html,可忽略第2条;
4、帖子作者需承担一切因本文发表而直接或间接导致的相关责任;
5、如本帖内容或部分内容转载自其它媒体,这并不代表本站赞同其观点和对其真实性负责;
6、如本帖若为资源类,将仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您安装或使用的设备中彻底删除上述内容;
7、如果您喜欢该程序,请支持正版软件,购买注册,可以得到更好的正版服务;
8、如本帖侵犯到任何版权或违法问题,请立即邮件告知我们,我们将及时予以处理。
0条回复 |  最后回复于2019-11-11
登录注册 后才可进行评论
签到
7人签到
已签0天
  • 46636帖子
  • 1936895热点量
  • 185018火热值