我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/reverse-integer/description/
题目描述:
知识点:字符串,int类型,数学
思路一:用long类型变量来存储转换后的结果来判断是否越界
由于int型数据越界之后会出现意想不到的结果,比如Integer.MAX_VALUE + 1 = 0。而题目规定的数据范围内在long类型数据里怎么反转都是不会越界的,因此用long类型变量来存储结果来判断是否越界即可。如果越界,立即返回0;否则,在返回的时候将变量强转为int型变量返回。
很明显,这个思路的时间复杂度是O(n)级别的,n为输入数字的位数。而空间复杂度是O(1)级别的。
JAVA代码:
public class Solution {
public int reverse(int x) {
boolean flag = true;
if(x < 0) {
x = -x;
flag = false;
}
if(x == 0) {
return 0;
}
while(x % 10 == 0) {
x /= 10;
}
long result = 0;
while(x > 0) {
result = result * 10 + x % 10;
if (result > Integer.MAX_VALUE) {
return 0;
}
x /= 10;
}
if(flag) {
return (int)result;
}else {
return -(int)result;
}
}
}
LeetCode解题报告:
思路二:用一个StringBuilder类型的变量来存储数字中每一位上的值
怎样来判断反转后的结果越界呢?
这里我们用Integer.parseInt()函数抛出异常来判断反转后的字符串所构成的数字越界。
显然,我们只遍历了一遍原来的数字,时间复杂度是O(n)级别的,n为输入数字的位数(包含负号)。至于空间复杂度,我们用了一个长度为n的StringBuilder类型的变量,因此空间复杂度是O(n)级别的。
JAVA代码:
public class Solution {
public int reverse(int x) {
StringBuilder stringBuilder = new StringBuilder();
if(x < 0) {
x = -x;
stringBuilder.append("-");
}
while(x > 0) {
stringBuilder.append(x % 10);
x /= 10;
}
try {
return Integer.parseInt(stringBuilder.toString());
} catch (Exception e) {
return 0;
}
}
}
LeetCode解题报告: