LeetCode题库整理【Java】—— 7整数反转

LeetCode题库整理【Java】

7.整数反转

题目:给出一个32位的有符号整数,你需要将这个这个整数中每位上的数字进行反转。
示例1
输入: 123
输出: 321
示例2:
输入: -123
输出: -321
示例3:
输入: 120
输出: 21
注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, (2^31) −1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

思路:用一个StringBuilder(字符串生成器)类型的变量来存储数字中每一位上的值,通过对输入的int型数值采用取余的方式依次取出最后一位数字,数组越界的话使用 Integer.parseInt()会抛出异常,从而达到数组越界的判断

完整的Java测试代码如下:

public class IntegerInversion {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num=-123;
		IntegerInversion reversion=new IntegerInversion();
		reversion.reverse(num);
	}
	public int reverse(int x) {
		StringBuilder str=new StringBuilder();
		if(x<0) {  //保存负号,使x变为绝对值大小
			str.append('-');
			x = -x;
		}
		while(x>0) {
			str.append( x%10 );//逐次将x的最后一位数字加进str中
			x/=10;//取整
		}
		System.out.println(str);
		//用Integer.parseInt()函数抛出异常来判断反转后的字符串化为整型后是否越界
		try {
			return Integer.parseInt(str.toString());
		}catch(Exception e) {
			return 0;
		}
	}
}

显然,这种方法只遍历了一遍原来的数字,时间复杂度是O(n),n为输入数字的位数(包含负号)。至于空间复杂度,由于只用了一个长度为n的StringBuilder类型的变量,因此空间复杂度是O(n)。
在这里插入图片描述

参考博文LeetCode007——反转整数https://blog.csdn.net/qq_41231926/article/details/81915741
:有一些博主使用long类型变量来存储转换后的结果进而判断是否越界,我觉得不符合题目中 “只能存储得下 32 位的有符号整数” 的假设,32位有符号整数应该是将数据类型限制为了int型, 所以我觉得不能使用long, 当然,此意见仅供参考。

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页