栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

力扣题7整数反转

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣题7整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−2^31,  2^31 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

1.自己的解法:先将整数转换为字符串,然后定义两个指针分别指向头部和尾部,不断地交换两个指针指向字符的位置,然后将字符串重新转换为整数输出,利用try...catch来捕获异常,防止出现超出范围的情况。

   注意:要考虑负数的情况。

class Solution {
    public int reverse(int x) {
        int num = x;
        
        String numString = Integer.toString(Math.abs(num));//先将整数取绝对值,防止出现交换负号的情况
        
        
        int left = 0;//指向字符串头部的指针
        int right = numString.length() - 1;//指向字符串尾部的指针
        char[] numsChar = numString.toCharArray();
        char c = ' ';
        while(left < right){
            //交换字符位置
            c = numsChar[left];
            numsChar[left] = numsChar[right];
            numsChar[right] = c;

            left++;
            right--;
        }

        numString = new String(numsChar);
        if(x < 0){//如果是负数的情况,在字符串头部加一个负号
            numString = "-" + numString;
        }
        //捕获异常
        try{
            return num = Integer.parseInt(numString);
        }catch(Exception e){
            return 0;
        }
    }
}

   这种方法效率比较低。

2.注意:因为题目条件给了不能存储超过32位的数字,因此不能用long来存储整数。

   评论的一个答案,利用long向int的向下转型是否出现了精度损失来判断是否超出了范围,很精彩,来自@弋

 public int reverse(int x) {
        long n = 0;
        while(x != 0) {
            n = n*10 + x%10;//因为最后除都会得到0,而且负号在取余时也会带上,因此就不需要单独考虑负号的情况了
            x = x/10;//剩下的数字
        }
        return (int)n==n? (int)n:0;//利用强制类型转换来判断是否超出了32位的取值范围
    }

题源:力扣

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/275947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号