LeetCode之路第七题

来源:互联网 发布:楼板荷载计算软件 编辑:程序博客网 时间:2024/05/21 15:47

本着为后面研究生铺路,必须把算法整明白,于是乎入了leetcode 算法第四版也在看,不过觉得不配合视频真的对推理证明不那么容易接受,后面的题答案后续也会贴上来。今天主要是为了分析一下刷题的第七题下面上题


Reverse digits of an integer. 
Example1: x = 123, return 321 
Example2: x = -123, return -321 
Note: 
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows. 

题目大概意思就是输入一个integer(注意是整形,不是整数)然后把它翻转,边界条件是不能越integer的界

我一开始用java写想用字符串直接指针就好代码如下

public static int test(int x) {


if (x > 0) {

String str =x +"";

char[] a = str.toCharArray();

int j = a.length - 1;

for (inti = 0;i < a.length / 2;i++) {

char temp = a[i];

a[i] =a[j];

a[j--] =temp;

}

str = String.valueOf(a);

x = Integer.parseInt(str);

returnx;

} else if (x < 0) {

x = x * -1;

String str =x +"";

char[] a = str.toCharArray();

int j = a.length - 1;

for (inti = 0;i < a.length / 2;i++) {

char temp = a[i];

a[i] =a[j];

a[j--] =temp;

}

str = String.valueOf(a);


return Integer.parseInt(str) * -1;

}

return 0;

}

但是一直给我报 

Runtime Error Message:Line 14: java.lang.NumberFormatException: For input string: "9646324351"

Last executed input:1534236469
大概意思就是他输一个越界的string类型本来该返回0的但是我还是返回了一个倒叙的数,没办法只能用数学方法取模了,这里参考了一个大神的做法来检测边界条件

 public int reverse(int x) {
        int ans=0;
        while(x!=0){
       int temp=ans*10+x%10;
            if(temp/10!=ans){//如果此时temp和ans不相等那么说明temp越界了,这个设计省去了很多麻烦
                return 0;
            }
            ans=temp;
            x/=10;
        }
      return ans;
}


就酱,明天继续刷

原创粉丝点击