371. Sum of Two Integers
題目網址:https://leetcode.cn/problems/sum-of-two-integers/
題意:給兩整數
a和b, 在不使用+、-運算的情況下, 返回兩整數之和。

Solution:
想法:將加法拆分成無進位加法、進位這兩個部分
XOR:為無進位的加法, 透過
a ^ b得到無進位的加法結果, 還需要找到進位的數, 並把這兩者相加才能得到答案
&、shift:
a & b把a、b中相同位置皆為 1 的 bit 設為 1, 最後再將a & b左移一位即可得到進位的數
e.g.a = 5,b = 4, 則進位數 =a & b=0100, 但0100並非進位的數,1000才是真正進位的數
因此, 我們的步驟如下:
- 得到
a和b的進位數- 得到無進位加法
- 循環此過程, 直到
carry = 0e.g.
a = 5,b = 4
- 得到 carry
b = (a & b) << 1 = 1000、無進位加法a = (a ^ b) = 0001- 得到 carry
b = (a & b) << 1 = 0000、無進位加法a = (a ^ b) = 1001b = 0表示carry = 0要結束循環, 得到答案a = 1001 = 9
class Solution { |
- time:$O(1)$ ➔ 最多計算 32 次
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論

