前话
今天开始励志刷一下leetcode上面的题目(还好这个网站没被TG和谐)。从easy的开始,数一下差不多有40道,争取两个月搞定。
题目
没想到做的第一道题目,虽然看似简单,却费了很大周折。
题目如下:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
刚看到这道题,首先蹦出的想法是把整数转换为字符串,然后前后位置换下再转回int型,实事证明这样是不可取的,因为当输入的int型数字很大的时候,比如412851289525983,就会产生溢出,这样在使用Integer.parseInt这种函数的时候会报错,正确的做法是对数字进行int操作,利用取10的余数获得每位数字。下面展示下,错误答案和正确答案。
代码
1.正确解
public class Solution {
public int reverse(int x) {
int sum = 0;
while (Math.abs(x) != 0)
{
if(Math.abs(sum) > Integer.MAX_VALUE / 10)
{
return 0;
}
sum = sum * 10 + x % 10;
x = x / 10;
}
return sum;
}
}
2.错误解
public class Solution {
public int reverse(int x) {
if(Math.abs(x)>100){
return 0;
}
else{
String x_str=Integer.toString(x);
char[] x_char = x_str.toCharArray();
String x_reverse_str="";
//System.out.print(Character.isDigit(x_char[0]));
if(Character.isDigit(x_char[0])){
for(int i=(x_str.length()-1);i>=0;i--){
x_reverse_str+=x_char[i];
}
}
else{
x_reverse_str+=x_char[0];
for(int i=(x_str.length()-1);i>=1;i--){
x_reverse_str+=x_char[i];
}
}
return Integer.parseInt(x_reverse_str);}
}
}
/********************************
* 本文来自博客 “李博Garvin“
* 转载请标明出处:http://blog.csdn.net/buptgshengod
******************************************/