給定乙個 32 位有符號整數,將整數中的數字進行反轉。
示例 1:
輸入: 123示例 2:輸出: 321
輸入: -123示例 3:輸出: -321
輸入: 120注意:輸出: 21
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−2**31, 2**31 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0.
使用python解題的話上述型別的話不用再考慮,也就是說,python直譯器認為int型別不只有32位,所以在python中也就不存在溢位這個問題。因此python可以取巧,先將整數進行反轉,然後判斷反轉之後的整數是否超越邊界。
在其他的程式語言中,int一般被規定為32位有符號整數,因此,其所能表示的最大範圍是被限定的,32位中第一位被拿來做符號位,只有剩下的31位能夠表示資料。所以最小的負數是-2147483647嗎?錯,不是。因此,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
在二進位制中,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 根據這個假設,如果反轉後的整數溢位,則返...