第一种方法
class Solution {
public int reverse(int x) {
//如果传入的数字是0的话,直接反转结果就是0
int result = 0;
while(x != 0){
//取模
int a = x % 10;
//将取了的数字消去
x = x / 10;
// 判断溢出,溢出则返回0
if(result>Integer.MAX_VALUE/10 || (result == Integer.MAX_VALUE/10 && a>7))
return 0;
if(result<Integer.MIN_VALUE/10 || (result == Integer.MIN_VALUE/10 && a<-8))
return 0;
result = result * 10 + a; //result很容易溢出,int范围是:最大:2147483647
// 最小:-2147483648 判断最后一位不要大于 7 和 不要小于8
}
return result;
}
}
第二种方法
class Solution {
public int reverse(int x) {
int result = 0;
// 捕获溢出异常
try{
// 如果x>0
if( x > 0){
// 转为StringBuilder,反转字符串
String s = new StringBuilder(String.valueOf(x)).reverse().toString();
// 在转为整形
result = Integer.valueOf(s);
return result;
}else{
// 先转为正数
x=-x;
// 同理
String s=new StringBuilder(String.valueOf(x)).reverse().toString();
result=Integer.valueOf(s);
// 最后将结果转为负数
return -result;
}
}catch(Exception e){
return 0;
}
}
}
总结:
1. java中 int 类型的范围
public class Print {
public static void main(String[] args) {
System.out.println("最大:" + Integer.MAX_VALUE);
System.out.println("最小:" + Integer.MIN_VALUE);
}
}
-231~231-1,即-2147483648~2147483647。
2. 反转字符串
/**
* 利用数组和charAt()反转字符串
* @param x
* @return
*/
public String reverseOfArray(String x) {
// 将字符串转为char数组
char[] temp = x.toCharArray();
// 反转
for(int i = 0;i<x.length();i++) {
temp[i] = x.charAt(x.length()-i-1);
}
String result = String.valueOf(temp);
return result;
}
/**
* 利用StringBuilder
* @param x
* @return
*/
public String reverseOfStringBuilder(String x) {
return new StringBuilder(x).reverse().toString();
}
/**
* 利用栈
* @param x
* @return
*/
public String reverseOfStack(String x) {
Stack<Character>stack = new Stack<Character>();
char[] chArray = x.toCharArray();
// 入栈
for(Character ch:chArray){
stack.add(ch);
}
// 出栈---先进后出
for(int i = 0 ;i < x.length();i++){
chArray[i] = stack.pop();
}
return chArray.toString();
}