LeetCode - 7.整数反转 - 简单

基于Java的一些结题总结。

题目描述及示例:
在这里插入图片描述
一、解题思路
定义一个result变量,用于存储结果。利用 x%10 每次取出待反转数的最后一位,通过result += result * 10 + x % 10;来加和。
需要注意的是,转换后得到的结果存在溢出的风险,即超出题目限定的范围。因此在定义变量是把result声明为long类型。

二、自写代码

class Solution {
    public int reverse(int x) {
        long result = 0;

        while(x != 0){
            int temp = x % 10;
            
            result = result * 10 + temp;
            x = x / 10;
        }
		//判断是否产生溢出
        return (int)result == result?(int)result:0;
    }
}

三、自写代码结果分析
时间复杂度T(n) = O(log2n),空间复杂度S(n) = O(1)。
运行结果如下:
在这里插入图片描述
返回结果时,利用了强制类型转换有可能造成数据丢失的特性,如果反转得到的数有溢出,则在从long转为int是为有数据丢失。从而避免了用大于小于等判断符的繁琐。
利用三目运算符?:会使代码简洁很多。

//判断是否产生溢出
        return (int)result == result?(int)result:0;
为了进一步精简代码,加和部分也可以直接写成
		result = result * 10 + x % 10;

四、别人的解决方案

    public int reverse(int x) {
        int res = 0;
        while (x != 0) {
            int t = x % 10;
            int newRes = res * 10 + t;
            //如果数字溢出,直接返回0
            if ((newRes - t) / 10 != res)
                return 0;
            res = newRes;
            x = x / 10;
        }
        return res;
    }

作者:sdwwld
链接:https://leetcode-cn.com/problems/reverse-integer/solution/tu-wen-
这里主要是判断是否溢出的具体实现有所不同。原理是一样的,利用的int类型的溢出风险来判断。但是自写代码中的比较方法会更加简洁。

五、总结
由于存在溢出的风险,先定义成long来保存真实结果,这个想法挺好。
题目较为简单,没啥好总结的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值