解法一:
思路:先將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-1
,z
則表示步進,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.迴...