第十三天(位运算)
今天完成题目:693,190,268,371,1731,401,405,1684 693:交替位二进制数
pass
190:颠倒二进制位
pass
268:缺失数字
pass
371,1731:两整数之和
def getSum(self, a, b):
# 2^32
MASK = 0x100000000
# 整型最大值
MAX_INT = 0x7FFFFFFF # 第一位表示正负,所以整数最大值=2^31-1
MIN_INT = MAX_INT + 1 # 负数的补码是在反码的基础上+1,负数最小值=-2^31
#变成补码后,正负数可以直接相加,而后通过符号位判断正负
while b != 0:
# 计算进位
carry = (a & b) << 1
# 取余范围限制在 [0, 2^32-1] 范围内
a = (a ^ b) % MASK
b = carry % MASK
return a if a <= MAX_INT else ~(a^0xFFFFFFFF)
401:二进制手表
字符为hour,整数为minute
combinations获取所有的组合情况,permutations可以获取所有的排列情况
限制时间范围
转化为字符型
405:数字转换为十六进制数
if num<0: num=0x100000000+num # 负数补码是一种偏移
1684:整数转换
同405类似,将负数补码看作偏移,之后再做比较
最后更新于
这有帮助吗?