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 = 0
e.g.
a = 5
,b = 4
- 得到 carry
b = (a & b) << 1 = 1000
、無進位加法a = (a ^ b) = 0001
- 得到 carry
b = (a & b) << 1 = 0000
、無進位加法a = (a ^ b) = 1001
b = 0
表示carry = 0
要結束循環, 得到答案a = 1001 = 9
class Solution { |
- time:$O(1)$ ➔ 最多計算 32 次
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論