Letcode--整数反转

题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321

示例 2:
输入: -123
输出: -321

示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [231,  2311]。请根据这个假设,如果反转后整数溢出那么就返回 0
普遍的思路,新建一个数组反过来存,简单除暴,但是效率和内存消耗大
class Solution {
    public int reverse(int x) {
        if(x == 0 || x<-2147483648 || x>2147483647){
            return 0;
        } 
        char[] str = Integer.toString(x).toCharArray();
        char[] newStr;
        if(x < 0){
            newStr = new char[str.length];
            newStr[0] = '-';
            for(int i = 1;i < str.length ;i++){
                newStr[i] = str[str.length - i]; 
            }      
        }else{
            if(str[str.length-1] == '0'){
                newStr = new char[str.length - 1];
               for(int i = 0;i < str.length-1 ;i++){
                newStr[i] = str[str.length - i - 2];
               }     
            }else{
                newStr = new char[str.length];
                for(int i = 0;i < str.length ;i++){
                newStr[i] = str[str.length - i - 1];
                }
            }
        }
        Long y = Long.parseLong(String.valueOf(newStr));
        if( y<-2147483648 || y>2147483647){
            return 0;
        }
        return Integer.parseInt(Long.toString(y));
    }
}
结果在这里插入图片描述

结果可以看出,虽然解决了问题但是效率并不客观。

经过研究和思考,下面的方法更好,我们要考虑一下怎么取最后一个数字

例如:12345 怎么取5 ==> 1234怎么取4 ==> 123 怎么取3

在这里插入图片描述
由图可见:我们取模就可以了,可以看出代码简洁了很多。

class Solution {
    public int reverse(int x) {
        //方法二
        int res = 0;
        while(x!=0) {
            //每次取末尾数字
            int tmp = x%10;
            if (res>214748364 || res<-214748364) {
                return 0;
            }
            res = res*10 + tmp;
            x /= 10;
        }
        return res;		

    }
}
具体的执行逻辑:
x=12345
第一次:tmp = 5  res = 5     x = 1234
第二次:tmp = 4  res = 54    x = 123
第三次:tmp = 3  res = 543   x = 12
第四次:tmp = 2  res = 5432  x = 1
第五次:tmp = 1  res = 54321 x = 0
运行结果

在这里插入图片描述
结果的确让人很满意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值