題目描述
解題思路
本題定義爲簡單,那麼應該用不到什麼高大上的數據結構,其實就是考大家對 %
和 /
的使用,以及對整數邊界的判別。
%
:取餘,例如:11 % 10 = 1
,取尾/
:除以並取整,例如:11 / 10 = 10
,去尾- 兩個搭配使用,就可以達到將一個數,從後往前依次取出每個數字,正好用於本題
- 因爲整數的最大值爲:
2147483647
,最小值爲:-2147483648
- 如果一個數
大於214748364
,那麼下一步rev = rev*10+pop
一定越界;或者一個數等於214748364
,並且pop > 7
,那麼下一步rev = rev*10 + pop
也一定越界 - 如果一個數小於
-214748364
,那麼下一步rev = rev*10+pop
一定越界;或者一個數等於-214748364
,並且pop < -7
,那麼下一步rev = rev*10 + pop
也一定越界
Java
代碼
class Solution {
public static int reverse(int x) {
int rev = 0; //用於存儲反轉後的數
while( x != 0){
int pop = x % 10; //pop表示取出整數的最後一個數
//因爲整數的最大值爲:2147483647,最小值爲:-2147483648
//如果一個數大於214748364,那麼下一步rev = rev*10 一定越界;
//或者一個數等於214748364,並且pop > 7,那麼下一步rev = rev*10 + pop也一定越界
//如果一個數小於-214748364,那麼下一步rev = rev*10 一定越界;
//或者一個數等於-214748364,並且pop < -7,那麼下一步rev = rev*10 + pop也一定越界
if((rev > Integer.MAX_VALUE / 10||(rev == Integer.MAX_VALUE/10 && pop > 7))
||rev < Integer.MIN_VALUE / 10||(rev == Integer.MIN_VALUE/10 && pop <-8)){
return 0;
}
rev = rev*10 + pop; //把pop防到rev後面
x /= 10; //去掉整數的最後一個數,繼續遍歷
}
return rev;
}
}
Python3
代碼
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
num = 0
if x == 0:
return 0
if x < 0:
x = -x
while x != 0:
num = num * 10 + x % 10
x = x // 10
num = -num
else:
while x != 0:
num = num * 10 + x % 10
x = x // 10
if num > pow(2,31)-1 or num < pow(-2,31):
return 0
return num
注意:
11 % 10 = 1,-11 % 10 = 9
11 // 10 = 1, -11 // 10 = -2
11 / 10 = 1.1,-11 / 10 =-1.1
python對正數和負數的結果不一樣,我們應該將負數轉爲正數再操作
C++
代碼
class Solution {
public:
int reverse(int x) {
int rev = 0; //用於存儲反轉後的數
while( x != 0){
int pop = x % 10; //pop表示取出整數的最後一個數
//因爲整數的最大值爲:2147483647,最小值爲:-2147483648
//如果一個數大於214748364,那麼下一步rev = rev*10 一定越界;
//或者一個數等於214748364,並且pop > 7,那麼下一步rev = rev*10 + pop也一定越界
//如果一個數小於-214748364,那麼下一步rev = rev*10 一定越界;
//或者一個數等於-214748364,並且pop < -7,那麼下一步rev = rev*10 + pop也一定越界
if((rev > INT_MAX / 10||(rev == INT_MAX/10 && pop > 7))
||rev < INT_MIN / 10||(rev == INT_MIN && pop <-8)){
return 0;
}
rev = rev*10 + pop; //把pop防到rev後面
x /= 10; //去掉整數的最後一個數,繼續遍歷
}
return rev;
}
};