力扣刷题百天计划 Day5 整数反转

学习目标:

我会持续更新我独特的算法思路,希望能给大家带来不一样的思维拓展!
如果大家感觉有帮助的话,欢迎点赞关注支持哦!
你们的鼓励是我坚持下去的动力!
!!!

力扣题库第七题 官方链接


学习内容:

整数反转

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

如果反转后整数超过 32 位的有符号整数的范围 [231,  2311] ,就返回 0。

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

示例 1:

输入:x = 123
输出:321
示例 2:

输入:x = -123
输出:-321
示例 3:

输入:x = 120
输出:21
示例 4:

输入:x = 0
输出:0

提示:

-231 <= x <= 231 - 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer

学习时间:

2022.1.11


学习产出:

思路一
在这里插入图片描述

解题思路

1.我们如果想要将整数反转,只需要逆序输出就行了,很自然的我们想到用字符串来存数字,然后反序遍历数组,但是这样反而让问题变复杂了。前面花很多时间做这个,但是回头一想,根本不用这么复杂。所以,要多思考!
2.我们可以每次对10取余,求余出来的结果恰好就是最后一位,也就是我们想要逆序输出的第一位,然后将传入的x给他除以10,舍弃最后一位就行,当x变为0的时候,也就是全部取出了
3.我们写一个while循环就可以遍历了
4.但是有一个很坑的点,Int型数据最大值是2的31次方-1,最小值是负的2的31次方,但是,我们也不能拿值和它做比较,因为Int不能存比它的值。所以,我们到第九位的时候,就要做判断了,如果前九位都大于它了,那么最后一位根本不用判断,直接越界。如果前九位等于它,那么久判断我们最后取出的是不是大于最大值的最后一位,大于就越界。

public class Solution {
    
    
    public int Reverse(int x) {
    
    
        int res = 0;
            int currentNumber = 0;
            while (x != 0)
            {
    
    
                currentNumber = x % 10;
                //为什么我们这里要比较前九位?而不是直接比较十位?因为十位会直接越界,所以比较前九位就行 
                if (res > 214748364 || (res == 214748364 && currentNumber > 7))
                {
    
    
                    return 0;
                }
                
                if (res < -214748364 || (res == -214748364 && currentNumber < -8))
                {
    
    
                    return 0;
                }

                res = res * 10 + currentNumber;
                x /= 10;
            }

            return res;
    }
}

作者:荷兰猪小灰灰
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/m0_48781656/article/details/122443344