Leetcode 7. 整數反轉
文章目錄
- Leetcode 7. 整數反轉
- 1、題目
- 2、思路
- 3、代碼
1、題目
給你一個 32 位的有符號整數 x ,回傳將 x 中的數字部分反轉后的結果,
如果反轉后整數超過 32 位的有符號整數的范圍 [?231, 231 ? 1] ,就回傳 0,
假設環境不允許存盤 64 位整數(有符號或無符號),
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0
提示:
- -231 <= x <= 231 - 1
2、思路
首先看到這個題想到是遞回直到該數到0為止,但是這個題有一個限制條件-231 <= x <= 231 - 1,也就是說我們不能用long存盤最終結果,而且有些數字可能是合法范圍內的數字,但是反轉過來就超過范圍了,
最大的32位整數2147483647,將它反過來之后我們發現它超出了范圍,而在回圈取最后一位數字的時候就需要進行判斷是否溢位,

上圖中,綠色的是最大32位整數,對最大的整數除10后只有大于最大的整數,該數就一定存在溢位問題,但是我們還要主意一點,如果最大的整數除10后與4相同的取到的余數一定要比這個8小,也就這里圖中的第三行、第四行、第五行,
如果某個數字大于 214748364則說明溢位了
如果某個數字等于 214748364,說明還需要跟最小數的末尾比較,即看它是否小于8
對于負數也是一樣的

如果某個數字小于 -214748364則說明溢位了
如果某個數字等于 -214748364,說明還需要跟最小數的末尾比較,即看它是否小于8
廢話少說~~~~~上代碼!
3、代碼
解法一:
class Solution {
public int reverse(int x) {
int result=0;
int tmp=0;
while(x!=0){
tmp = x % 10;
if(result > Integer.MAX_VALUE/10 || (result==Integer.MAX_VALUE / 10 && tmp > Integer.MAX_VALUE%10)) //判斷是否溢位
return 0;
if(result < Integer.MIN_VALUE/10 || (result==Integer.MIN_VALUE / 10 && tmp < Integer.MIN_VALUE%10)) //判斷是否溢位
return 0;
result = result*10 +tmp;
x/=10;
}
return result;
}
}
解法二:
class Solution {
public int reverse(int x) {
int result = 0;
int tmp = result;
while(x!=0){
tmp = result; //保存上一次result的結果
result = (result * 10) + ( x % 10 );
x /= 10;
}
if(result /10 !=tmp) return 0;//用于判斷結果是否溢位
return result;
}
}
原題鏈接:7. 整數反轉 - 力扣(LeetCode) (leetcode-cn.com)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/354542.html
標籤:其他
