LeetCode_位运算_简单_371. 两整数之和

x33g5p2x  于2022-06-16 转载在 其他  
字(0.6k)|赞(0)|评价(0)|浏览(294)

1.题目

给你两个整数 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

2.思路

(1)位运算_递归

(2)位运算_非递归

3.代码实现(Java)

  1. //思路1————位运算_递归
  2. class Solution {
  3. public int getSum(int a, int b) {
  4. if (b == 0) {
  5. return a;
  6. }
  7. /*
  8. ^:异或运算,运算规则为相异为 1,相同为 0
  9. a ^ b 计算它们的二进制表示时不同时为 1 的位之和
  10. */
  11. int sum = a ^ b;
  12. /*
  13. &:与运算,运算规则为
  14. a & b:把 a 和 b 中同为 1 的两位相加,那么既然两位同为 1,也就代表在 2 进制中要发生进位,
  15. 处理进位时可以将结果左移一位即可,右边刚好补 0
  16. */
  17. int carry = (a & b) << 1;
  18. //递归计算 sum 与 carry 的和,直到 carry 为 0 时退出递归求和
  19. return getSum(sum, carry);
  20. }
  21. }
  1. //思路2————位运算_非递归
  2. class Solution {
  3. public int getSum(int a, int b) {
  4. while (b != 0) {
  5. int carry = (a & b) << 1;
  6. a = a ^ b;
  7. b = carry;
  8. }
  9. return a;
  10. }
  11. }

相关文章