LeetCode 7:逆整数 |为什么它适用于 long 而不适用于 int?

问题描述 投票:0回答:4

我试图解决 LeetCode 上的 this 问题,您必须使用函数反转整数。限制是,如果反转的数字超出有符号 32 位整数范围,即 (-2^31) 到 (2^31 - 1),则返回 0。当我像这样使用整数作为反转变量时

class Solution { 
        public int reverse(int x) {
            int rev = 0;
            while (x != 0) {
                rev = rev * 10 + x % 10;
                x /= 10;
            }

            if((rev > Integer.MAX_VALUE) || (rev < Integer.MIN_VALUE))
                return 0;

            return rev;
        }
}

IntelliJ IDEA 表明

Condition 'rev > Integer.MAX_VALUE' is always 'false'

但是,当我使用 long 而不是 int 时,问题就解决了,程序按照您的预期运行。

class Solution {
        public int reverse(int x) {
            long rev = 0;
            while (x != 0) {
                rev = rev * 10 + x % 10;
                x /= 10;
            }

            if((rev > Integer.MAX_VALUE) || (rev < Integer.MIN_VALUE))
                return 0;

            return (int)rev;
        }
}

我想知道为什么会这样?

java integer reverse long-integer
4个回答
0
投票

在第一个代码块中,

rev
是一个整数。因此,它不可能大于大于
Integer.MAX_VALUE
(整数的最大值)。

对于

long
,其值可能大于最大可能的
int
值。 Java
int
是一个带符号的 32 位值。 Java
long
是有符号的 64 位值。


0
投票

对我来说这有效...

class Solution {
    public int reverse(int x) {
        int mod = 0, rev = 0;
            while(x!=0){
                if(rev < Integer.MIN_VALUE/10 || rev > Integer.MAX_VALUE/10){
                return 0;
                }
            mod = x%10;
            x = x/10;
            rev = rev*10 + mod;
            }
            return rev;
    }
}

0
投票
class Solution:
  def reverse(self, x: int) -> int:
    check_num = str(x)
    flag = 0
    if(check_num[0] == '-'):
        check_num = check_num[1:]
        flag = 1

    #print(check_num)

    #reverse
    time = len(check_num)
    storage = [0] * time 
    for i in range(len(check_num)):
        num = len(check_num)-i-1
        storage[i] = check_num[num]
        #print(storage[i])

    if(flag == 1):
        storage.insert(0, '-')

    #turn to string
    oneLinerString=""
    for x in storage:
        oneLinerString += x

    ans = int(oneLinerString)  # removes leading zeros in the reversed string

    if not -2**31 <= ans <= 2**31 - 1:
        return 0

    return ans

在 Leetcode 上尝试使用 Python 3 格式的代码,你将会通过..


0
投票

在Java中,int数据类型是32位有符号整数,这意味着它可以保存从-2,147,483,648到2,147,483,647的值。如果转速超过此范围,它将溢出并回绕到最小值,即-2,147,483,648。因此,条件 rev > Integer.MAX_VALUE 永远不会为真。

© www.soinside.com 2019 - 2024. All rights reserved.