題目描述:
不使用運算子 + 和 - ,計算兩整數 a 、b 之和。
示例 1:
輸入: a = 1, b = 2
輸出: 3
示例 2:
輸入: a = -2, b = 3
輸出: 1
a ^ b可以得到兩數相加不進製的加法結果
(a & b) << 1可以得到兩數相加產生的進製
c++版本:
class
solution
};
c++版本:
class
solution
return a;}}
;
python版本:
class
solution
(object):
defgetsum
(self, a, b)
: mask=
0x100000000
# 2^32
max=
0x7fffffff
# 整型最大值
min=max+
1while b !=0:
carry=
(a & b)
<<
1 a=
(a ^ b)
%mask # 取餘範圍限制在[0, 2^32-1]內
b=carry%mask
if areturn a
else
:return~(
(a % min)
^ max)
c++
當a & b的結果是負數時,左移就會造成符號位的溢位,所以此處需要轉換為unsigned int來避免可能出現的左移越界行為。
python
主要的難點在於, python整數型別為unifying long integers, 即無限長整數型別。在 python 中,整數不是 32 位的,也就是說你一直迴圈左移並不會存在溢位的現象,這就需要我們手動對 python 中的整數進行處理,手動模擬 32 位 int 整型。
具體做法是將整數對 0x100000000 取模,保證該數從 32 位開始到最高位都是 0。
python 由於不知道符號位具體是第幾位,因此需要進行的操作是:
1.將輸入數字轉化成無符號整數
2.計算無符號整數相加並的到結果
3.將結果根據範圍判定是正數還是負數,對映為有符號整型
(關注後可以免費獲得本人在csdn發布的資源原始碼)
LeetCode刷題覆盤筆記 896 單調數列
題目描述 如果陣列是單調遞增或單調遞減的,那麼它是單調的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞增的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞減的。當給定的陣列 a 是單調陣列時返回 true,否則返回 false。示例 1 輸入 1,2,2,3 輸出 tr...
leetcode刷題python之最小覆蓋子串
題目 給你乙個字串 s 乙個字串 t,請在字串 s 裡面找出 包含 t 所有字母的最小子串。示例 輸入 s adobecodebanc t abc 輸出 banc 學到了 之前沒記住又遇到了 新函式 counter 可以直接把字串變成字元 別的也行 的結合 all 判斷列表有沒有空字串或者0,有則返...
leetcode刷題筆記 陣列3
給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列 現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。這裡的解答用到了投機取巧的一種方法,使用set函式 class solution def containsduplicate self,nums list int...