LeetCode刷题记录_反转整数

Posted annofyf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题记录_反转整数相关的知识,希望对你有一定的参考价值。

题目

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [?231,  231 ? 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

 

解法:难点在于如何判断是否溢出(前提是题目中的加粗下划线,我以为题目的意思是只能用int来解题,如果可以用long,double那题目自然简单好多,解完题目发现大家都用了long和double,我真是。。。。。)在不考虑溢出的情况下解题很简单这样就可以

class Solution {
    public int reverse(int x) {
        int r=0;
        int temp;
        temp = x;
       
        while(temp/10!=0||temp%10!=0){
            r=r*10+temp%10;
            temp /=10; 
        }
        return r;  
    }
}

 如果有溢出则需要判断溢出,不溢出的情况下,循环中的r,正数必然是递增的,负数递减的

class Solution {
    public int reverse(int x) {
        int r=0;
        int temp;
        temp = x;
        if(x>0){
            while(temp/10!=0||temp%10!=0){
            if(r>(r=r*10+temp%10)/10) return 0;
            //正数出现递减
            temp /=10; 
        }
            return r;
        }
        else{
            while(temp/10!=0||temp%10!=0){            
            if(r<(r=r*10+temp%10)/10) return 0; 
            //负数出现递增
            temp /=10; 
        }
            return r;
        }
    }
}

 看到别人的解法发现一个很好的把负数转为正数的方法,设定一个符号之int sign=1;若x<0则sign=-1;x=-1*x; 最后return -1*r;写出来更简洁。感觉自己还是蠢了,有一点一直没想明白,存不存在这种数,*10之后溢出了,但是溢出后的值比之前大?简单粗暴的用0:Integer.MAX_VALUE遍历了一下,并没有发现。

 

以上是关于LeetCode刷题记录_反转整数的主要内容,如果未能解决你的问题,请参考以下文章

leetcode刷题日记——反转整数

LeetCode刷题-007反转整数

Leetcode刷题整数反转

leetcode_整数反转

算法进阶之Leetcode刷题记录

LeetCode刷题记录_罗马数字转整数