【Leetcode】7. Reverse Integer

题目地址:

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)

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页