标签:内存 最大值 res ret 代码 array ack 中间 span
leetCode有道题Reverse Integer,因为int的最大值为2的31次方减一,最小值为-2的31次方。
我一开始的代码将res递归加放在try中,以为溢出会有异常,然而并没有。
因为出传入的参数为int类型,且内存和时间要求都能满足,所以long存放中间结果足够了。leet上有个哥们用了一种更机智的溢出检测(自己去看:D)
我的代码:
public class Solution { public int reverse(int x) { if(x<=9&&x>=-9||x==0){ return x; } boolean nagetive=false; int y=x; if(x<0){ y=-x; nagetive=true; } ArrayDeque<Integer> s=new ArrayDeque(); while(y>0){ s.add(y%10); y/=10; } long res=0L; while(s.size()>=1){ res+=s.poll()*Math.pow(10,s.size()); } if(res>Integer.MAX_VALUE||res<Integer.MIN_VALUE){ return 0; } return nagetive?(int)-res:(int)res; } }
java 8中有溢出检测的加方法。
Stack Overflow:https://stackoverflow.com/questions/3001836/how-does-java-handle-integer-underflows-and-overflows-and-how-would-you-check-fo
Java Integer Addition Subtration Overflow 整数加减溢出
标签:内存 最大值 res ret 代码 array ack 中间 span
原文地址:http://www.cnblogs.com/chenhuanBlogs/p/7086878.html