LeetCode007——反转整数

我的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解题报告:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值