LeetCode算法题-Sum of Two Integers(Java实现)

这是悦乐书的第210次更新,第222篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第78题(顺位题号是371)。计算两个整数a和b的总和,但不允许使用运算符+和 - 。例如:

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

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

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

借助循环来实现。先将a赋值给临时变量sum,然后判断b的正负,如果b大于0,sum就自加加,同时b自减减;反之如果b小于0,则sum就自减减,b就自加加,最后返回sum即可。

public int getSum(int a, int b) {
    if (a == 0) {
        return b;
    }
    if (b == 0) {
        return a;
    }
    int sum = a;
    if (b > 0) {
        while (b > 0) {
            sum++;
            b--;
        }
    } else {
        while (b < 0) {
            sum--;
            b++;
        }
    }
    return sum;
}


03 第二种解法

因为题目说不许用加减运算符,所以我们需要考虑使用位运算。在做加法运算时,会产生进位的情况。先来看一个53+69例子:

  • 如果不考虑进位做加法,可以得到12。

  • 如果考虑进位做加法,可以得到110。

这时我们把两数12和110加起来,就是53和69的和,122。

如果把这种考虑位、不考虑位的计算方式换成二进制数,那么:

  • 如果不考虑进位做加法,0+0=0,1+0=1,0+1=1,1+1=0。这其实就是异或(^)运算,对应位不同时,取1,否则取0。

  • 如果考虑进位做加法,0+0=0,1+0=0,0+1=0,1+1=1。这其实就是与(&)运算,相同位均为1才是1。

首先,我们可以使用a和b之间的与(&)运算来查找进位。其次,我们可以在a和b之间使用异或(^)运算来查找不同的位,并将其赋值给a,然后,我们将进位向左移动一个位置并将其赋值给b,直到没有进位或b为0。最后返回a即可。

public int getSum2(int a, int b) {
    if (a == 0) {
        return b;
    }
    if (b == 0) {
        return a;
    }
    while (b != 0) {
        int carry = a&b;
        a = a^b;
        b = carry << 1;
    }
    return a;
}


04 第三种解法

我们可以将第二种解法变成递归的写法。

public int getSum3(int a, int b) {
    if (b == 0) {
        return a;
    }
    return getSum3(a ^ b, (a&b) << 1);
}


05 小结

算法专题目前已连续日更超过两个月,算法题文章78+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 姓名:李浩然 学号:16030410020 转自:http://blog.csdn.net/Dreaming_My...
    洛花无阅读 7,606评论 0 1
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,364评论 0 33
  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 10,230评论 0 0
  • 我说圣诞节想要颗圣诞树 你带我到商场 指着那颗大大的圣诞树说“看!你的圣诞树”
    一只草莓味的鹿阅读 1,031评论 0 0
  • 目标一,控制自己的情绪。破功。由于爸爸的批评,要不就说我工作不认真,要不就说我早上去的太迟,我深感委屈。他看不到我...
    Vivian_ae3a阅读 2,860评论 0 0

友情链接更多精彩内容