力扣刷题(第九十六天)
灵感来源
- 保持更新,努力学习
- python脚本学习
数字的补数
解题思路
- 计算原数字的二进制表示的位数
l
。 - 构造一个
l
位的全 1 数(1 << l) - 1
。 - 用全 1 数减去原数字得到补数。
class Solution:def findComplement(self, num: int) -> int:# 计算数字的二进制位数l = num.bit_length()# 构造全1掩码并计算补数return (1 << l) - 1 - num
逐行解释
class Solution:def findComplement(self, num: int) -> int:# 计算num的二进制表示的位数(不包含前导零)# 例如:num=5(二进制101)的位数为3l = num.bit_length()# 构造一个与num二进制位数相同的全1数字,再减去num得到补数# 步骤解析:# 1. 1 << l:将1左移l位,得到100...0(共l个0)# 例如l=3时,1 << 3 = 8(二进制1000)# 2. (1 << l) - 1:得到l位全1的数字# 例如l=3时,8-1=7(二进制111)# 3. 减去num后,相当于对num的二进制位取反(不包含前导零)# 例如5(101)与7(111)相减得2(010),即101取反为010return (1 << l) - 1 - num