【Leetcode】7. Reverse Integer
阿新 • • 發佈:2021-01-28
技術標籤:# 陣列、連結串列與模擬leetcodejava演算法
題目地址:
https://leetcode.com/problems/reverse-integer/
給定一個 32 32 32位整數,返回其翻轉之後的數。如果溢位了則返回 0 0 0。
重點是如何判斷溢位。設最小最大整數分別是
m
m
m和
M
M
M。如果是上溢位,那麼說明
r
>
0
r>0
r>0並且
10
r
+
x
%
10
>
M
10r+x\% 10>M
10r+x%10>M,則有
10
r
>
M
−
x
%
10
10r>M-x\% 10
10r>M−x%10,即
r
>
(
M
−
x
%
10
)
/
10
r>(M-x\% 10)/10
r>(M−x%10)/10,如果是下溢位,那麼說明
r
<
0
r<0
r<0並且
10
r
+
x
%
10
<
m
10r+x\% 10<m
10r+x%10<m,即
r
<
(
m
−
x
%
10
)
/
10
r<(m-x\% 10)/10
r<(m−x%10)/10。程式碼如下:
public class Solution {
public int reverse(int x) {
int res = 0;
while (x != 0) {
// 如果下一步就要溢位了,則返回0
if (res > 0 && res > (Integer.MAX_VALUE - x % 10) / 10) {
return 0;
}
if (res < 0 && res < (Integer.MIN_VALUE - x % 10) / 10) {
return 0;
}
res = res * 10 + x % 10;
x /= 10;
}
return res;
}
}
時空複雜度 O ( 1 ) O(1) O(1)。