welcome to my blog
LeetCode Top Interview Questions 371. Sum of Two Integers (Java版; Easy)
题目描述
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
Example 1:
Input: a = 1, b = 2
Output: 3
Example 2:
Input: a = -2, b = 3
Output: 1
第一次做; 对加减法的理解
- a + b 的问题拆分为: a 和 b 的无进位相加结果 + a 和 b 的进位结果
- 无进位相加通过异或计算
- 进位结果通过与和移位计算
- 关键: 循环2,3两步,直到进位为 0
//负数, 以原码的形式思考还是以补码的形式思考? 感觉计算机是以补码的形式思考, 所以我也用补码的形式思考吧
//异或: 无进位相加
//核心: 抓住两个量:1)异或的结果 2)相与再左移一位的结果; 细节: 1)循环终止条件是相与再左移一位的结果为0 2)最后的xor就是结果
class Solution {
public int getSum(int a, int b) {
//异或的结果
int xor = a^b;
//相与再左移一位的结果
int andL1 = (a&b)<<1;
while(andL1!=0){
int tmp = xor;
xor = tmp ^ andL1;
andL1 = (tmp & andL1)<<1;
}
return xor;
}
}