栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Leetcode371题两数之和

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode371题两数之和

给你两个整数 a 和 b ,不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和。

示例 1:

输入:a = 1, b = 2
输出:3

示例 2:

输入:a = 2, b = 3
输出:5

提示:
-1000 <= a, b <= 1000
解题代码:

class Solution {
public:
    int getSum(int a, int b) {
        if (!a) return b; // a+b=a^b, (a&b)<<1为零
        int sum = a ^ b, carry = (unsigned)(a & b ) << 1; // 转化为题a+b=a^b + (a&b)<<1。
        return getSum(carry, sum); //递归求解子问题
    }
};

解题思路:
位运算中 ⨁ bigoplus ⨁是不进位的加法运算, a + b a+b a+b可以拆分为不进位部分 + + +进位部分,不进位部分是 a ⨁ b abigoplus b a⨁b,进位可以用 ⋀ bigwedge ⋀符号得到 ( a ⋀ b ) (a bigwedge b) (a⋀b), 进位要加到前面一位所以原问题转化为 a + b = a b + ( a ⋀ b ) < < 1 a+b=a^b + (a bigwedge b)<<1 a+b=ab+(a⋀b)<<1, 因为此时不能使用加号,所有只有当 ( a + b ) < < 1 (a+b)<<1 (a+b)<<1为0时, a + b a+b a+b等于 a ⋁ b a bigvee b a⋁b。
现在考虑一下 a ⋀ b < < 1 a bigwedge b<<1 a⋀b<<1永远不会为0吗,显然是不会的, a ⋀ b < < 1 a bigwedge b<<1 a⋀b<<1,每次最后会多一个零,最多进行32次。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295589.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号