第十三天(位运算)
今天完成题目: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:二进制手表 1. 字符为hour,整数为minute 2. combinations获取所有的组合情况,permutations可以获取所有的排列情况 3. 限制时间范围 4. 转化为字符型
from itertools import combinations, permutations
h_m = ['8','4','2','1',32,16,8,4,2,1]
list(combinations(h_m,num)) #获得组合情况(有序不重复)
list(permutations(h_m,num)) #获得排列情况(无序有重复)
405:数字转换为十六进制数
if num<0: num=0x100000000+num # 负数补码是一种偏移
1684:整数转换
同405类似,将负数补码看作偏移,之后再做比较
最后更新于
这有帮助吗?