作者热门文章
- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。
示例 1:
输入:a = 1, b = 2
输出:3
示例 2:
输入:a = 2, b = 3
输出:5
提示:
-1000 <= a, b <= 1000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sum-of-two-integers
(1)位运算_递归
(2)位运算_非递归
//思路1————位运算_递归
class Solution {
public int getSum(int a, int b) {
if (b == 0) {
return a;
}
/*
^:异或运算,运算规则为相异为 1,相同为 0
a ^ b 计算它们的二进制表示时不同时为 1 的位之和
*/
int sum = a ^ b;
/*
&:与运算,运算规则为
a & b:把 a 和 b 中同为 1 的两位相加,那么既然两位同为 1,也就代表在 2 进制中要发生进位,
处理进位时可以将结果左移一位即可,右边刚好补 0
*/
int carry = (a & b) << 1;
//递归计算 sum 与 carry 的和,直到 carry 为 0 时退出递归求和
return getSum(sum, carry);
}
}
//思路2————位运算_非递归
class Solution {
public int getSum(int a, int b) {
while (b != 0) {
int carry = (a & b) << 1;
a = a ^ b;
b = carry;
}
return a;
}
}
我是一名优秀的程序员,十分优秀!