
位运算
脱水星球
这个作者很懒,什么都没留下…
展开
-
[Python] [LeetCode] 338. 比特位计数
经典递推 设f[num]为当前数字含有的二进制1的个数 如果当前数为奇数,则二进制末尾为1,f[num]=f[num>>1] + 1 如果当前数为偶数,则二进制末尾为0,f[num]=f[num>>1] class Solution: def countBits(self, num: int) -> List[int]: ans = [0] for i in range(1, num + 1): ans.appen原创 2021-04-11 21:55:01 · 171 阅读 · 0 评论 -
[Python] [LeetCode] 剑指Offer 65. 不用加减乘除做加法 (Python负数存储原理)
基本思路 写出真值表,^得到当前位运算后结果,&得到进位,考虑到进位会进一步引发进位,要while循环至进位为0。 由于每一位的操作相同,每次直接整体操作,无需按位操作。 注意的点 Python中的负数以补码形式储存,这就意味着其高位有无穷个1。此题限制在32位有符号整数的语境中,因此开头先用0x7FFFFFFFF获取0 ~ 32位,运算后判断是否为负数,如果为负数则需补齐高位的所有1。补齐方法:直接用 ~ 会将运算结果也取反,因此先对0 ~ 32位取反,再全部取反,相当于对32位之后全部取反。 妙原创 2021-04-10 14:58:21 · 168 阅读 · 0 评论