leetcode之371两整数之和Golang
题目描述
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
算法
本题的核心思想就是将加法的进位和与不进位和分开来运算,例如5+4以二进制来看,可以分成两部分,分别是进位的和与非进位的和
0 1 0 1
0 1 0 0
可以知道非进位和为0 0 0 1
进位和为1 0 0 0
非进位和可以使用异或来求得,进位和可以通过按位与然后将结果左移一位来得到
当进位和为0的时候,最终的和就是非进位和了
代码
func getSum(a int, b int) int {
for {
or := a ^ b
carry := (a & b) << 1
if carry == 0 {
return or
}
a, b = or, carry
}
}
浙公网安备 33010602011771号