Leetcode刷題 整數反轉

2021-10-04 10:54:53 字數 2118 閱讀 8404

解法一:

思路:先將x轉化為字串形式str(x),然後判斷x是否負數,是則輸出除負號外的倒序字串,然後取負,否則直接輸出倒序字串。

def

reverse_force

(x:int)-

>

int:

str_x =

str(x)

if str_x[0]

!="-"

: str_x = str_x[::

-1]#從後往前數,步進為1(321

x =int(str_x)

else

: str_x = str_x[:0

:-1]

#從後往前數,到第0位(符號位)之前的數,步進為1(321

x =int(str_x)

x =-x return x if

-2147483648

< x <

2147483647

else

0print

(reverse_force(

-123

))

知識點:

a[x,y]a[x,y,z]的用法:

a[x,y]:其中x表示字串的起始位置,y表示字串的結束位置的前乙個位置y-1則預設從頭到尾。

例:b='python',b=a[1,4], print(b)→yth

a[x,y,z]:與a[x,y]相同,x表示字串的起始位置,y表示字串的結束位置的前乙個位置y-1z則表示步進,z>0表示從前往後,z<0表示從後往前。

例:b='python',b=a[:,:,2], print(b)→pto

b='python',b=a[:,:,-1], print(b)→nohtyp

解法二:

思路:y取x的絕對值。重複彈出y的最後乙個數字y%10,將其放到res的最後res = res * 10 + y % 10,y去掉最後一位數y //= 10,重複操作可使y的值倒序放置在res中。

y, res =

abs(x),0

# 則其數值範圍為 [−2^31, 2^31 − 1]

boundry =(1

<<31)

-1if x >

0else

1<<

31while y !=0:

res = res *

10+ y %

10if res > boundry:

#防止溢位

return

0 y //=

10#去掉最後一位數

return res if x >

0else

-res

知識點:

<<表示左移,1<<31表示1左移31位,後面補0.

1<<31=0x80000000,作為有符號整數,其最高位為1表示負數,其值正好為32位有符號整數的最小值- 2,147,483,648

1<<31-1在計算時為1<<31+(-1)溢位的1被捨去,相當於取反操作,結果為0x7fffffff,為32位有符號整數的最大值2,147,483,648

LeetCode 刷題 整數反轉

示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返回 0。雖然是個easy難度的,但是想一次通過並不簡單...

LeetCode刷題 整數反轉

給你乙個 32 位的有符號整數 x 返回 x 中每位上的數字反轉後的結果。如果反轉後整數超過 32 位的有符號整數的範圍 231,231 1 就返回 0。假設環境不允許儲存 64 位整數 有符號或無符號 示例 1 輸入 x 123 輸出 321 示例 2 輸入 x 123 輸出 321 示例 3 輸...

LeetCode刷題心得 整數反轉

整數反 如果想得到乙個32位整數x中的每乙個數字,可以採用如下演算法 int pop x 10 x 10 這個演算法的意思就是,先pop得到x除以10取餘後的結果,然後x再往後退一位。例如x 123,則第一步pop 3,然後x變為12,第二步就是pop 2,x變為1,最後一步則pop 1,x 0.迴...