LeetCode刷题记录(十六):无重复字符的最长子串

140 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情

整数反转

题目如下图所示,也可以在LeetCode题目中找到此题。

image.png

题目解析

题目提供素材

题目中提供的素材十分有限。

  1. 只有一个整型数字X。

注意:这里的整型数字的取值范围是当前整型结构的最大区间。

image.png

我的解读

从题目描述中,已经给出了几个示例,比如123最后的预期结果是321,-123最后的预期结果是-321。

我们想要得到预期的结果还是比较容易的。

有点费劲的地方是如何处理反转后超出整数取值范围的情况,当然了返回0是必然的。

如何获取是一个关键,这道题要是没有这个点,也就是个简单系数。

解题思路

将暴力美学坚持到底!

让我们一步一步的实现一下吧。

只需要搞清下面几点信息就能实现出来。

如何取数字的最后一位数值

这里通过取余的方式去获取,每次除10,余下的数字就是尾部数字了。

如何判断数字是否超出了整数的取值范围

有一个前提是,传入的参数不会是超出这个范围的,但反转后可能会是。

但是一味的加上后,可能会造成整数错位的情况。

所以不能在每次拼接后进行比对,而是要在拼接前进行对比。

这里要巩固两个常量值。

Integer.MIN_VALUE

Integer.MAX_VALUE

if (result < Integer.MIN_VALUE / 10 || result > Integer.MAX_VALUE / 10) {
    return 0;
}

使用上述方法进行比对即可完成这项工作了。

代码

具体的代码如下,今天巩固了一个知识点,就是Integer中最大整型数字和最小整型数字的常量。

class Solution {
    public int reverse(int x) {
        int result = 0;
        int i = 0;
        while(x != 0){
            if (result < Integer.MIN_VALUE / 10 || result > Integer.MAX_VALUE / 10) {
                return 0;
            }
            int n = x % 10;
            if(i != 0 || n != 0){
                result = result * 10 + n;
                x = x / 10;
            }
            i++;
        }
        return result;
    }
}

执行结果

image.png