(一百二十一) LeetCode 2 整数反转

发布时间:2024-12-21 22:33

地球自转一周形成一天,公转一周则形成一年。 #生活百科# #百科知识#

最新推荐文章于 2023-07-03 11:13:53 发布

i加加 于 2019-01-13 21:09:37 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

1.题目

2.解答

package com.example.a2_reverse;

public class MyClass {

public static int reverse(int x) {

String originInt = String.valueOf(x);

String reverseInt = new StringBuilder(originInt).reverse().toString();

return Integer.parseInt(reverseInt);

}

public static void main(String args[]){

int i = reverse(1236878);

System.out.println(" i = " + i);

}

}

class Solution {

public int reverse(int x) {

int rev = 0;

while (x != 0) {

int pop = x % 10;

x /= 10;

if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) {

return 0;

}

if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) {

return 0;

}

rev = rev * 10 + pop;

}

return rev;

}

}

只是很low地用StringBuilder反转,并且没有考虑数组越界。

3.官方解答

方法:弹出和推入数字 & 溢出前进行检查

思路

我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。

算法

反转整数的方法可以与反转字符串进行类比。

我们想重复“弹出” xx 的最后一位数字,并将它“推入”到 \text{rev}rev 的后面。最后,\text{rev}rev 将与 xx 相反。

要在没有辅助堆栈 / 数组的帮助下 “弹出” 和 “推入” 数字,我们可以使用数学方法。

//pop operation:

pop = x % 10;

x /= 10;

//push operation:

temp = rev * 10 + pop;

rev = temp;

但是,这种方法很危险,因为当temp = rev * 10 + pop 时会导致溢出。

幸运的是,事先检查这个语句是否会导致溢出很容易。

网址:(一百二十一) LeetCode 2 整数反转 https://www.yuejiaxmz.com/news/view/534791

相关内容

【LeetCode刷题(数据库)】175. 组合两个表
9.回文数
清史稿·列传·卷一百六十一
二十一世纪的绿色能源——热电转换技术
leetcode 201 数字范围按位与
6÷2(1+2)=? 一道数学题忽悠百万网友
【LeetCode/力扣】1723. 完成所有工作的最短时间
大平原(三百一十五)
非常有用的一百二十个生活小常识
邮院百宝书(十一)丨寝室整理邮院小贴士

随便看看