leetcode 7 反轉整數(python3)

2021-08-25 11:03:30 字數 1701 閱讀 5734

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

示例 1:

輸入: 123

輸出: 321

示例 2:

輸入: -123

輸出: -321

示例 3:

輸入: 120

輸出: 21

注意:

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−2**31, 2**31 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0.

使用python解題的話上述型別的話不用再考慮,也就是說,python直譯器認為int型別不只有32位,所以在python中也就不存在溢位這個問題。因此python可以取巧,先將整數進行反轉,然後判斷反轉之後的整數是否超越邊界。

在其他的程式語言中,int一般被規定為32位有符號整數,因此,其所能表示的最大範圍是被限定的,32位中第一位被拿來做符號位,只有剩下的31位能夠表示資料。

因此,int型別下最大的資料表示為2147483647=2^31-1。其原碼、反碼、補碼都相同如下:

0111 1111 1111 1111 1111 1111 1111 1111

因為32位中有一位符號位,因此只有31位能表示資料,那麼好像int的最小數值就應該是-2147483647=-2^31-1。其原碼、反碼、補碼如下

原碼為1111 1111 1111 1111 1111 1111 1111 1111,

反碼為1000 0000 0000 0000 0000 0000 0000 0000,

補碼為1000 0000 0000 0000 0000 0000 0000 0001

所以最小的負數是-2147483647嗎?錯,不是。

在二進位制中,0有兩種表方法。

+0的原碼為0000 0000 0000 0000 0000 0000 0000 0000,

-0的原碼為1000 0000 0000 0000 0000 0000 0000 0000,

因為0只需要乙個,所以把-0拿來當做乙個最小的數-2147483648。

-2147483648的補碼表示為1000 0000 0000 0000 0000 0000 0000 0000,在32位沒有原碼。

注意,這個補碼並不是真正的補碼,真正的補碼是1 1000 0000 0000 0000 0000 0000 0000 0000,溢位。

所以帶符號32位int型別整數為-2147483648~2147483647

class

solution:

defreverse

(self, x):

reverse_num=int(str(abs(x))[::-1])

if reverse_num.bit_length() > 31:

return

0else:

return reverse_num if x > 0

else -reverse_num

LeetCode7反轉整數

給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123輸出 321示例 2 輸入 123輸出 321示例 3 輸入 120輸出 21注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返回 0。以字串方式思考...

LeetCode 7 反轉整數

給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123輸出 321示例 2 輸入 123輸出 321示例 3 輸入 120輸出 21注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返回 0。很簡單,就是不...

leetcode 7反轉整數

隨機一題 給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返...