🌈【LeetCode - 整数之和 】- JavaScript =>位运算+乘除/对数

435 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。


说明:文章部分内容及图片出自网络,如有侵权请与我本人联系(主页有公众号:小攻城狮学前端)

作者:小只前端攻城狮、 主页:小只前端攻城狮的主页、 来源:掘金

GitHub:P-J27、 CSDN:PJ想做前端攻城狮

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


371. 两整数之和

题目描述

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

示例:

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

思路1:位运算

主要步骤:

  • 先不考虑进位,用异或实现不考虑进位时的求和a^b
  • 进位不为0时,用与运算+左移一位来实现进位(a & b) << 1
  • 将步骤1异或运算的结果和步骤2得到的进位进行求和,(求和就是重复步骤1和2);
  • 直到进位为0时,返回步骤1的异或运算结果。
实现1
const getSum = (a, b) => {
    while (b) {
        // 进位
        const c = (a & b) << 1;
        // 不考虑进位的加法
        a ^= b;
        // 将进位赋值给b
        b = c;
    }
    return a;
};
实现2
const getSum = (a, b) => {
    if (!b) return a;
    return getSum(a ^ b, (a & b) << 1);
};
实现2简化
const getSum = (a, b) => (b ? getSum(a ^ b, (a & b) << 1) : a);

思路2:乘除法+对数

分析:**+和-不行,和/还是可以的,对数也是可以的*,虽然乘除的底层还是加减,所以这里只是参考

var getSum = function(a, b) {
    let x = Math.pow(2, a), y = Math.pow(2, b);
    let s = x * y;
    return Math.log2(s);
};

感谢阅读,希望能对你有所帮助,文章若有错误或者侵权,可以在评论区留言或在我的主页添加公众号联系我。

写作不易,如果觉得不错,可以「点赞」+「评论」 谢谢支持❤