476. 数字的补数
https://leetcode-cn.com/problems/number-complement/
解法一:
用二进制11111…的十进制减去num即可,关键是求出num有几位.
解法二
num的最高为1为从右到左第i位(从0开始),则有:2^i^ <= num < 2^i+1^
又由于1 <= num < 2^31^,因此0 <= i < 31,因此看是否有num >= 2^i^ ,最多用30次比较就可以找到num的最高位1
之后构造num的补码mask=2^i+1^ -1,用mask与num异或即可(py中异或是二进制位运算)
最后更新于