[英]How to solve java reverse integer leetcode problem
嘗試了所有通過測試用例的方法,但它仍然只顯示一個錯誤。 我不知道如何糾正錯誤。
輸入: 1534236469
實際輸出: 1056389759
預期輸出: 0
我不知道為什么我的代碼沒有給出輸出 0。
class Solution
{
public static int reverse(int x)
{
boolean flag = false;
if (x < 0)
{
x = 0 - x;
flag = true;
}
int res = 0;
int p = x;
while (p > 0)
{
int mod = p % 10;
p = p / 10;
res = res * 10 + mod;
}
if (res > Integer.MAX_VALUE)
{
return 0;
}
if (flag)
{
res = 0 - res;
}
return res;
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int revinteger = reverse(x);
System.out.println(revinteger);
}
}
語句res > Integer.MAX_VALUE
永遠不會為真,因為res
是int
數據類型。 並且int永遠不能大於Integer.MAX_VALUE (MAX_VALUE 本身就是我們可以存儲為 int 的最大值)。
使用long
數據類型來反轉數字,並在最后返回結果的整數值。
if (res > Integer.MAX_VALUE)
如果它是整數的最大可能值,它將如何大於它? 您必須以另一種方式檢測它。
一種方法是使用long
數據類型而不是int
。 然后,它可以變得大於Integer.MAX_VALUE
,並且該捕獲將起作用。
否則,您可能會找到另一種方法來捕捉這種情況。
因為基於 long 的操作相對較慢,所以我只會使用long
來做最后的檢查,以確定是否即將發生溢出。
很明顯,如果除最后一位以外的所有數字都反轉,則沒有int
會導致溢出。 所以在返回值之前處理循環外的最后一位數字。 min 的邊界情況首先被消除,以方便后續處理。 現在只有Integer.MAX_VALUE
與正數和負數有關。
public static int reverse(int v) {
if (v == Integer.MIN_VALUE) {
return 0; // guaranteed overflow if reversed.
}
int rev = 0;
long ovflLimit = Integer.MAX_VALUE;
int sign = v < 0 ? -1 : 1;
v *=sign;
while (v > 9) {
int digit = v % 10;
rev = rev * 10 + digit;
v/=10;
}
long ovfl = (long)(rev)*10+v;
return ovfl > ovflLimit ? 0 : (int)(ovfl)*sign;
}
這個問題可以通過多種方式解決,但是如果我們堅持使用Java
和您的解決方案,那么正如一些答案中已經指出的那樣,通過使用int
條件if(res > Integer.MAX_VALUE)
永遠不會為true
。 因此,您不會得到預期的輸出為 0。
您可以通過將值轉換為long
並檢查它是否超出int
限制,在反轉最后一位數字之前進行檢查。 正如 WJS 所建議的那樣。
如果你想堅持你的解決方案而不做太多改變,下面是相同的工作代碼。
class Solution {
public static int reverse(int x) {
boolean flag = false;
long input = x;
if (input < 0) {
input = 0 - input;
flag = true;
}
long res = 0;
long p = input;
while (p > 0) {
long mod = p % 10;
p = p / 10;
res = res * 10 + mod;
}
if (res > Integer.MAX_VALUE) {
return 0;
}
if (flag) {
res = 0 - res;
}
return (int) res;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int revInteger = reverse(x);
System.out.println(revInteger);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.