丽江电子商务网站建设,南充 网站建设,垂直外贸网站,青岛网页制作设计营销文章目录题目描述解法 代码① 字符串解法② 类栈做法题目描述
边界比较需要考虑#xff0c;而且还有不允许64位整数的要求。
解法 代码
① 字符串解法
起初想到的做法#xff0c;不过缺点比较多首先用到了long#xff0c;实际上不允许使用#xff0c;修改…
文章目录题目描述解法 代码① 字符串解法② 类栈做法题目描述
边界比较需要考虑而且还有不允许64位整数的要求。
解法 代码
① 字符串解法
起初想到的做法不过缺点比较多首先用到了long实际上不允许使用修改的话做法参考②的溢出判断估计比较慢类型转换了很多次。
class Solution {public int reverse(int x) {// 取反后会溢出的情况单独考虑if(x Integer.MIN_VALUE){return 0;}int flag 1;// 由于使用的是字符串因此负数情况取反if(x 0){flag -1;x -x;}StringBuilder sb new StringBuilder(new Integer(x).toString());long ans Long.parseLong(sb.reverse().toString()) * flag;if(ansInteger.MAX_VALUE || ansInteger.MIN_VALUE){ans 0;}return (int)ans;}
}② 类栈做法
看了题解感觉应该是栈。两个if分别在不适用long的前提下进行了上下溢出的判断-8 7对应极限值。每次pop出最末尾的数字然后push到新的“栈”上。
class Solution {public int reverse(int x) {int nowNum 0;while (x ! 0) {// 栈的 peek、popint pop x % 10;x / 10;// 正溢出if(nowNum Integer.MAX_VALUE / 10 || (nowNum Integer.MAX_VALUE / 10 pop 7)) {return 0;}// 负溢出if(nowNum Integer.MIN_VALUE/10 ||(nowNum Integer.MIN_VALUE pop -8)) {return 0;}nowNum nowNum * 10 pop;}return nowNum;}
}时间复杂度O(log(x))大概循环lg(x)次。空间复杂度O(1)。