博客
关于我
力扣(LeetCode) -- 算法第七题-- 整数反转
阅读量:343 次
发布时间:2019-03-04

本文共 1640 字,大约阅读时间需要 5 分钟。

题目:

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

如果反转后整数超过 32 位的有符号整数的范围 [−2的31次方, 2的31次方 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer

思路:

步骤1:

最大的32位有符号整数为"2147483647"

最小的32位有符号整数为"-2147483648"

如果不了解的话我们可以利用Java代码去看看:

  • 最大的32位有符号整数(咱自己创建类哈!):
public static void main(String[] args) {           System.out.println(Integer.MAX_VALUE);    }
  • 最小的32位有符号整数:
public static void main(String[] args) {           System.out.println(Integer.MIN_VALUE);    }

就可以得到数值啦!

步骤2:
  • 首先看看最大值:

    在这里插入图片描述

  • 一起思考如何反转呢?

    反转的话我们需要将原来的数每个位分别取出,使用循环"while",当最后一次循环时数值会变成0。这里理解一下,比如将个位取出,需要原数对10取余,再乘与10,可以将个位向前翻一位,循环几次翻几位,最后一次循环可以把个位翻到第一位。获取十位是不是需要把原数除与10,再对十取余呢?当最后一位数,就是原数的最大位数对10取余后剩下的就为0了吧?

  • 那么我们怎么判断我们是否超出范围了呢?

    在这里插入图片描述

    看一下这个数值,与最大值进行对比,如果倒数第二位大于"4"的话,那我们最后一位是谁都不重要了吧,都会超出范围,有人会想"那我不出现最后一位不就可以了吗?",那不出现最后一位while循环结束了呀,那就输出值了嘛?对吧!

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 再看看这三个数:

    如果倒数第二个数没有超过范围的话,我们就要比较最后一个数了,这个想必大家都能理解的了。

  • 这时候问题又来了:“为什么我们不直接判断第一个数大于2那就返回0呢,一定要倒数第二个”?

    那。。。第一个是3 > 2,然后循环结束,返回一个0表示超出范围了?明显不可以吧!其他每位也是如此,至于倒数第二位就可以提前判断了,程序也变快了。算法不就是想要程序变快吗?

代码实现:

class Solution {       public int reverse(int x) {           int result = 0;        while (x != 0) {               int i = x % 10;            x /= 10;            //判断是否大于32位数            if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && i > Integer.MAX_VALUE % 10)) {                   return 0;            }            //判断是否小于32位数            if (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && i < Integer.MIN_VALUE % 10)) {                   return 0;            }            result = result * 10 + i;        }        return result;    }}

结果:

在这里插入图片描述

感谢您的阅读,不足之处欢迎指正!

转载地址:http://rbse.baihongyu.com/

你可能感兴趣的文章
NHibernate动态添加表
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
Nhibernate的第一个实例
查看>>
NHibernate示例
查看>>
nid修改oracle11gR2数据库名
查看>>
NIFI1.21.0/NIFI1.22.0/NIFI1.24.0/NIFI1.26.0_2024-06-11最新版本安装_采用HTTP方式_搭建集群_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_插入时如果目标表中已存在该数据则自动改为更新数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0058
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0最新版本安装_配置使用HTTP登录_默认是用HTTPS登录的_Https登录需要输入用户名密码_HTTP不需要---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增加修改实时同步_使用JsonPath及自定义Python脚本_03---大数据之Nifi工作笔记0055
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>