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 stubint 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, 当然,此意见仅供参考。