一、题目描述
二、我的狗屎思路与解题
、 当我看到这题后,我第一感觉是很简单,直接把int类型强转成String,接着一个循环倒置,最后再强转成int类型。✌,轻松化解!
class Solution { public int reverse(int x) { String res=""; boolean plus=true; if (x<0){ plus=false; x=-x; } String x1=x+""; System.out.println(x1.length()); for (int i=x1.length()-1;i>=0;i--){ res=res+x1.charAt(i); } if (plus==true){ return Integer.parseInt(res); }else return -Integer.parseInt(res); } }
- 狗屎,很明显这样只能完成十位数以内的数字,超过时就会报错了
- 无奈,只能加上try catch
class Solution { public int reverse(int x) { String res=""; boolean plus=true; if (x<0){ plus=false; x=-x; } String x1=x+""; System.out.println(x1.length()); for (int i=x1.length()-1;i>=0;i--){ res=res+x1.charAt(i); } if (plus==true){ try { return Integer.valueOf((new StringBuilder(res)).toString()); } catch (Exception e) { return 0; } }else { try { return Integer.valueOf((new StringBuilder(res)).toString()); } catch (Exception e) { return 0; } } } }
二、另外一个解法(纯数学)
class Solution { public int reverse(int x) { int res = 0; while(x!=0) { //每次取末尾数字 int tmp = x%10; //判断是否 大于 最大32位整数 if (res>214748364 || (res==214748364 && tmp>7)) { return 0; } //判断是否 小于 最小32位整数 if (res<-214748364 || (res==-214748364 && tmp<-8)) { return 0; } res = res*10 + tmp; x /= 10; } return res; } }
- 直接用除法求出
- 还有一种解法是利用long,但是说我们不能用long存储最终结果,而且有些数字可能是合法范围内的数字,但是反转过来就超过范围了。假设有1147483649这个数字,它是小于最大的32位整数2147483647的,但是将这个数字反转过来后就变成了9463847411,这就比最大的32位整数还要大了,这样的数字是没法存到int里面的,所以肯定要返回0(溢出了)。