1. 程式人生 > 其它 >【Leetcode】7. Reverse Integer

【Leetcode】7. Reverse Integer

技術標籤:# 陣列、連結串列與模擬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>Mx%10,即 r > ( M − x % 10 ) / 10 r>(M-x\% 10)/10

r>(Mx%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<(mx%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)