LeetCode刷題覆盤筆記 371 兩整數之和

2021-10-20 19:50:00 字數 1361 閱讀 8704

題目描述:

不使用運算子 + 和 - ​​​​​​​,計算兩整數 ​​​​​​​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...