LeetCode刷题系列—371.Sum Of Two Integers 不用+/-求两数之和

162 阅读1分钟

1 题目描述

1.1 英文描述

Given two integers a and b, return the sum of the two integers without using the operators + and -.

Example 1:

Input: a = 1, b = 2

Output: 3

Example 2:

Input: a = 2, b = 3

Output: 5

1.2 中文描述

给你两个整数,在不使用 +/- 这两个运算符的前提下,求它们的和。

2 解法

2.1 解法1 - 位运算

使用位运算和递归解决。

例如 2 + 3 = 5 ;其中5的二进制为0101。

运算过程如下:

  1. 2^3 等于 2+3 的无进位和 0001。
2^3等于

  0010
^ 0011
-------
  0001
  1. 我们发现 2&3 等于一个有规律的数,此数左移1位就是最终结果的进位数。
2&3等于:

  0010
& 0011
--------
  0010
  1. 2&3 的结果左移一位,得到最终结果的进位数。
0010 << 1 = 0100
  1. 0100再异或0001。
  0100
^ 0001
-------
  0101
  1. 循环操作,直到进位数为0。

2.2 代码

    public static int getSum(int a,int b){
        // b为进位,如果进位为零则和就是a.
        if(b == 0) return a;
        // 得到无进位和
        int i1 = a ^ b;
        // 得到进位数的过程数
        int i2 = a & b;
        // 得到最终进位数
        int i3 = i2 << 1; 
        // 递归
        return getSum(i1,i3);
    }

欢迎关注个人公众号,可直接扫描以下二维码或微信搜索“阿毛聊技术”进行关注。