给你两个整数 a 和 b 不使用 运算符 和- 计算并返回两整数之和。
示例 1
输入 a 1, b 2
输出 3
示例 2
输入 a 2, b 3
输出 5
不可以用运算符 和- 那么我们就需要用别的计算方法代替加减 这里我第一个想到的
就是用列表和len函数来代替加减。
如果是正数 那就让列表长度加一
如果是负数 那就让列表长度减一
用这个方法要注意两个情况
1 负数比正数大的时候 跟据负数大小让列表长度增加 根据正数让列表长度减少
2 两个负数时 列表长度增加 且最后的时候列表长度要取反。
class Solution(object): def getSum(self, a, b): :type a: int :type b: int :rtype: int change [] # 两个数都大于零的情况 if a 0 and b 0: for i in range(b): change.append(1) for j in range(a): change.append(1) return len(change) # 两个数都小于零的情况 elif a 0 and b 0: for i in range(abs(b)): change.append(1) for j in range(abs(a)): change.append(1) return -(len(change)) # 两个数只有一个数小于零的情况 elif a 0 or b 0: if max(a,b) max(abs(a),abs(b)): for i in range(max(a,b)): change.append(1) for j in range(min(abs(a),abs(b))): change.pop(0) return len(change) else: for i in range(max(abs(a),abs(b))): change.append(1) for j in range(min(abs(a),abs(b))): change.pop(0) return -len(change)
跟官方解法不一样 但是我觉得我可能有违规 因为我对列表取反的时候用了负号。
MASK1 4294967296 # 2^32 MASK2 2147483648 # 2^31 MASK3 2147483647 # 2^31-1 class Solution: def getSum(self, a: int, b: int) - int: while b ! 0: carry ((a b) 1) % MASK1 a (a ^ b) % MASK1 b carry if a MASK2: # 负数 return ~((a ^ MASK2) ^ MASK3) else: # 正数 return a
这是官方解 看完感觉自己没学过python[笑哭]



