題目
給定一個範圍為 32 位 int 的整數,將其顛倒。
例 1:
輸入: 123
輸出: 321
複製程式碼
例 2:
輸入: -123
輸出: -321
複製程式碼
例 3:
輸入: 120
輸出: 21
複製程式碼
注意: 假設我們的環境只能處理 32 位 int範圍內的整數。根據這個假設, 如果顛倒後的結果超過這個範圍,則返回 0。
方案
這個題目其實挺簡單的;思路如下:
- 判斷輸入的數字是否大於最大整數,其實這裡沒有必要判斷,因為如果引數輸入大於最大整數的話會直接報錯。
- 將整數轉換成字串
- 判斷是否是負數,這個依據就是判斷字串中是否存在‘-’
- 從後向前開始遍歷,注意的是必須後向遍歷且初始為0的情況下保持繼續向前迭代。
- 如果轉換之後的值大於最大整數,則會導致string轉int失敗,丟擲異常,那麼我們直接在這把異常捕獲,並且返回0(偷懶一波,丷)
public int reverse(int x) {
int result = 0;
if (x >Integer.MAX_VALUE){
return 0 ;
}
String s =String.valueOf(x);
int len = 0;
if (s!=null&&s.length()!=0&&s.charAt(0)=='-'){
len = 1;
}else if(s.length() == 1){
return x;
}
int lastp = s.length()-1;
boolean isStart = true;
String ints = "";
while( lastp >= len){
if (isStart && s.charAt(lastp)=='0'){
while (s.charAt(lastp)=='0'){
lastp--;
}
isStart = false;
}
if (isStart){
isStart = false;
}
ints = ints+s.charAt(lastp);
lastp--;
}
try{
result = Integer.parseInt(ints);
}catch (NumberFormatException e){
return 0;
}
return len==0?result:result*(-1);
}
複製程式碼