LeetCode007——反转整数

版权声明:版权所有,转载请注明原网址链接。 https://blog.csdn.net/qq_41231926/article/details/81915741

原题链接: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解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/81915741