Реверс целое число в Java (вопрос о методе) - PullRequest
2 голосов
/ 10 июня 2019

Оператор задачи является своего рода базовым - если входное значение представляет собой 32-разрядное целое число со знаком, обратное целое число равно, иначе выводится 0.

Вот код, который я придумал

public class Solution {
    public int reverse(int A) {
        if(A>=2143483647 || A<-2143483647)
        return 0;
        if(A>=0)
            return Integer.parseInt((new StringBuilder(String.valueOf(A))).reverse().toString());
        else
            return -1*Integer.parseInt((new StringBuilder(String.valueOf(-1*A))).reverse().toString());
    }
}

Решение не принято.Проблема в моем коде или тестовых случаях?

Ответы [ 3 ]

2 голосов
/ 10 июня 2019

Предполагая, что ввод int32, возможен следующий подход, включая проверку на переполнение.

public class Solution {
    public int reverse(int A) {
        //if(A < Integer.MIN_VALUE || A > Integer.MAX_VALUE) return 0;
        boolean neg = A < 0;
        A = Math.abs(A);
        long ret = 0;
        while(A != 0){
            ret = ret*10 + A%10;
            A = A/10;
        }
        if(ret > Integer.MAX_VALUE) return 0;
        return neg ? -(int)ret : (int)ret;
    }
}

Будьте внимательны, чтобы изменить int на long, если вход больше.

2 голосов
/ 10 июня 2019

Принятый ответ близок, но пропускает некоторые крайние случаи.Вот ответ, основанный на принятом ответе, но, надеюсь, правильно обрабатывает все случаи.

public static int reverse(int A) {

    long aLong = Math.abs((long)A);
    long ret = 0;
    while (aLong != 0) {
        ret = ret * 10 + aLong % 10;
        aLong = aLong / 10;
    }
    if (A < 0) {
        ret = -ret;
    }

    if ((ret < Integer.MIN_VALUE) || (ret > Integer.MAX_VALUE)) {
        return 0;
    } else {
        return (int) ret;
    }
1 голос
/ 10 июня 2019

вы можете сначала попробовать обратиться к длинному параметру (это гарантирует, что он не переполнится), а затем выполнить проверку.

public int reverse(int A) {
        long reversed; 
        if(A>=0)
            reversed=  reverseString(A);
        else
            reversed -1*  reverseString(-A) ;

        //we do the checking only after we have done the reverse.
        if(reversed > Integer.Max_VALUE || reversed < Integer.MIN_VALUE)
            return 0;
        else 
            return (int) reversed; //we do a down cast here.
}

public long reverseString(int A){
    StringBuilder sb = new StringBuilder(""+A).reverse(); 
    String s = sb.reverse().toString(); 
    return Long.parseLong(s);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...