LeetCode之Easy篇 ——(7)Reverse Integer
7、Reverse Integer
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
思路:
1、是否考慮正負號?
通過調用java.lang.Math類中取絕對值的abs方法,四種情況:
static double abs(double a);//返回 double 值的絕對值。
static float abs(float a);//返回 float 值的絕對值。
static int abs(int a);//返回 int 值的絕對值。
static long abs(long a);//返回 long 值的絕對值。
2、32位int型數據範圍?
最小值:Integer.MIN_VALUE:-2147483648
最大值:Integer.MAX_VALUE:2147483647
3、代碼第6行為什麽只需跟214748364(記為num)比較?
首先,只有當輸入值為十位數,末尾數字記為a(第一位必定是1或者2,因為輸入值也必須在最大值與最小值之間,否則報錯),res跟num才顯得有意義,盡管之前也一直在比較。
為了方便敘述,下面的res都是指最後一次跟 num比較的情況。
a為0時,res是8位數,肯定小於num。最後輸出9位數,肯定不會越界。
a為1時,res是以1開頭的9位數,肯定小於num。最後輸出10位數,也不會越界。
a為2時,res是以24開頭的9位數,肯定大於num,不必進行也不能進行下一次賦值,因為再加一位肯定超過範圍,而且也沒有跟num比較,return 0的機會了,因為此時x的值為0,直接跳出循環,return res,結果肯定報錯,因為超過最大值。
a大於2時,res肯定大於num,直接return 0即可,理由同上。
4、怎麽表示輸出值?
res = res * 10 + x % 10;完美解決了輸入值尾數為0的情況。
Java代碼如下:
import static java.lang.Math.abs;
class Solution {
public int reverse(int x) {
int res = 0;
while(x != 0){
if(abs(res) > Integer.MAX_VALUE / 10) return 0;
res = res * 10 + x % 10;
x /= 10;
}
return res;
}
}
LeetCode之Easy篇 ——(7)Reverse Integer