回歸次數:0
題目:
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設我們的環境只能存儲得下 32 位的有符號整數,則其數值范圍為 [?231, 231 ? 1]。請根據這個假設,如果反轉后整數溢出那么就返回 0。
解答:
public class Solution2 {
/**
* 方法一,把字符串一個一個存入棧里面,后進先出原則
* @param x
* @return
*/
public int reverse(int x) {
try{
StringBuffer buffer = new StringBuffer();
String temp = String.valueOf(x);
boolean flag = false;
if (temp.startsWith("-")){
flag = true;
temp = temp.substring(1,temp.length());
}
int[] list = new int[temp.length()];
for(int i = 0;i < temp.length();i ++){
String t = String.valueOf(temp.charAt(i));
int c = Integer.parseInt(t);
list[i] = c;
}
for (int i = list.length - 1;i >= 0;i --){
buffer.append(list[i]);
}
String result = buffer.toString();
while (result.startsWith("0") && result.length() != 1){
result = result.substring(1,result.length());
}
if (flag){
result = "-" + result;
}
int res = Integer.parseInt(result);
return res;
}catch (Exception e){
return 0;
}
}
/**
* 官方解法
* @param x
* @return
*/
public int reverse2(int x){
int rev = 0;
while (x != 0){
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE /10 && pop > Integer.MAX_VALUE % 10)){
return 0;
}
if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && pop < Integer.MIN_VALUE % 10)){
return 0;
}
rev = rev * 10 + pop;
}
return rev;
}
public static void main(String[] args) {
Solution2 s = new Solution2();
System.out.println(s.reverse(1534236469));
}
}