首页 > 后端开发 > Python教程 > 两个整数的和 - leetcode - Python

两个整数的和 - leetcode - Python

Linda Hamilton
发布: 2025-01-22 16:11:11
原创
562 人浏览过

让我们开始讨论不使用 ' ' 运算符将两个整数相加的核心。 这需要二进制操作。

SUM OF TWO INTEGERS - leetcode - Python

我们将像常规加法一样处理此问题,但使用二进制。

SUM OF TWO INTEGERS - leetcode - Python

  1. 从右侧开始添加,就像平常一样:1 1, 0 1, 1 0, 0 0。
  2. 由于我们使用的是二进制,如果和达到 2,则将其重置为 0(1 1 = 10 二进制,带进位后变为 0)。
  3. 对所有位重复此操作。这给了我们部分总和,暂时忽略进位。

SUM OF TWO INTEGERS - leetcode - Python

XOR (^) 位运算符完美地处理了这个初始和:

  • 如果位相同,结果为 0。如果不同,结果为 1。

这符合我们的需求:1 1 → 0(带进位)、0 1 或 1 0 → 1 和 0 0 → 0。

现在,让我们来谈谈携带者。 AND (&) 运算符帮助我们找到它们:

  • 如果两位都是 1,则结果为 1(进位)。

要将进位左移,我们将使用左移位。

SUM OF TWO INTEGERS - leetcode - Python

算法:

  1. 初始化:
    • sum = a ^ b(无进位求和的异或)
    • carry = (a & b)(并且用于携带)
  2. 迭代:
    • 重复直到carry == 0:
      • a = sum
      • b = carry << 1(进位左移)

示例(5 3):

  1. 初始值: SUM OF TWO INTEGERS - leetcode - Python
  2. 迭代 1:
    • sum = 0101 ^ 0011 = 0110
    • carry = 0101 & 0011 = 0001 SUM OF TWO INTEGERS - leetcode - Python
  3. 迭代 2:
    • sum = 0110 ^ 0010 = 0100
    • carry = 0110 & 0010 = 0010 SUM OF TWO INTEGERS - leetcode - Python
  4. 迭代 3:
    • sum = 0100 ^ 00100 = 0000
    • carry = 0100 & 0100 = 0100 SUM OF TWO INTEGERS - leetcode - Python
  5. 迭代 4:
    • sum = 0000 ^ 1000 = 1000
    • carry = 0000 & 1000 = 0000

进位为 0,所以最终的和是 1000 (8)。

SUM OF TWO INTEGERS - leetcode - Python

Python 的无界整数会导致负数问题。 左移可以导致无限增长。 为了解决这个问题,我们需要模拟固定大小的整数(例如 32 位)。

SUM OF TWO INTEGERS - leetcode - Python

我们将使用 32 位掩码 (0xFFFFFFFF) 来限制位数:

SUM OF TWO INTEGERS - leetcode - Python

这可确保仅考虑最后 32 位,从而防止无限增长。 如有必要,我们还会通过将其转换为 32 位二进制补码表示来处理潜在的负面结果。

SUM OF TWO INTEGERS - leetcode - Python

这种方法有效地模拟了Python中的32位整数运算,解决了无界整数和负数的问题。 if a > MAX_INT 条件确保结果保持在 32 位有符号整数范围内。 -12 和 -8 的示例演示了此校正如何产生 -20 的预期结果。

我的名字是 Jaimin Bariya,如果您发现有用的东西,请点赞和评论,并在 github jaimin-bariya 上关注我

以上是两个整数的和 - leetcode - Python的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板