LeetCode演算法個人解答 7 反轉整數

2021-08-29 22:48:22 字數 2898 閱讀 9973

給定乙個 32 位有符號整數,將整數中的數字進行反轉。

示例 1

:輸入:

123輸出:

321示例 2

:輸入:

-123

輸出:-

321示例 3

:輸入:

120輸出:

21注意:

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231

,231 − 1

]。根據這個假設,如果反轉後的整數溢位,則返回 0。

1.先判斷整數的符號並儲存下來

2.取整數的絕對值,方便之後的運算

3.通過取餘運算子%取得餘數,即當前整數的個位數

3.1 由於整數最高位不能為0,需要判斷新的整數是否不為0

4.將取到的餘數依次賦值給乙個新的數字

5.全部反轉後再加上正負號

5.1 判斷數字是否在範圍之內

class

solution

:def

reverse

(self, x)

:"""

:type x: int

:rtype: int

"""# 判斷 x 的正負

if x >=0:

flag =

1# x 為正

else

: flag =

0# x 為負

# 取x的絕對值

x =abs(x)

# 建立乙個標誌位 i ,保證反轉後的數最高為不為 0

i =0# 建立乙個整數,用於儲存和返回結果

res =

0# 判斷 x 是否為 0,判斷是否取到了最後乙個值

while x !=0:

# 取 x 的個位數 y

y = x %

10# 取 x/10 整數部分

x = x //

10# 判斷 y 是否是0(為了防止前n位是0,導致報錯)

if i ==0:

if y ==0:

continue

# 直接進入下乙個迴圈

else

: i =

1# 確定了最高位不為 0,以後不再判斷 y 是否為0,防止誤判

# 確定了最高位的數不為 0

res = res *

10+ y

# 判斷 res 是否是負數

if flag ==0:

# 通過flag,res 應該是負數,將 res 取反

res =

-res

# 返回 res

return res

只是在解1的基礎上加上了 res 取值範圍的判斷

class

solution

:def

reverse

(self, x)

:"""

:type x: int

:rtype: int

"""# 判斷 x 的正負

if x >=0:

flag =

1# x 為正

else

: flag =

0# x 為負

# 取x的絕對值

x =abs(x)

# 建立乙個標誌位 i ,保證反轉後的數最高為不為 0

i =0# 建立乙個整數,用於儲存和返回結果

res =

0# 判斷 x 是否為 0,判斷是否取到了最後乙個值

while x !=0:

# 取 x 的個位數 y

y = x %

10# 取 x/10 整數部分

x = x //

10# 判斷 y 是否是0(為了防止前n位是0,導致報錯)

if i ==0:

if y ==0:

continue

# 直接進入下乙個迴圈

else

: i =

1# 確定了最高位不為 0,以後不再判斷 y 是否為0,防止誤判

# 確定了最高位的數不為 0

res = res *

10+ y

# 判斷 res 是否是負數

if flag ==0:

# 通過flag,res 應該是負數,將 res 取反

res =

-res

# 判斷 res 是否在[−2**31, 2**31 − 1]中

if res >=(-

2**31)

and res <=(2

**31-1

):# 返回 res

return res

else

:# 返回0

return

0

class

solution

:def

reverse

(self, x)

:"""

:type x: int

:rtype: int

"""# 將x的絕對值轉換成字串,然後反轉,再轉回整數型別

reverse_num=

int(

str(

abs(x))[

::-1

])# 判斷二進位制的長度是否超過31

if reverse_num.bit_length(

)>31:

return

0else

:# 如果x>0,返回reverse_num,如果不是,返回-reverse_num

return reverse_num if x >

0else

-reverse_num

LeetCode演算法個人解答 189 旋轉陣列

給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1,2,3,4,5,6,7 和 k 3 輸出 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,1,2,3,...

LeetCode演算法題解答

leetcode演算法題解答 第四題 尋找兩個有序陣列的中位數 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。def findmedianso...

LeetCode演算法題目 7

題目描述 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返回 0。解決方案 反轉整數的方法可以與反轉字串進行模擬。我們想重複 彈出 xx 的最後一位...