博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leecode刷题(12)-- 整数反转
阅读量:5354 次
发布时间:2019-06-15

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

leecode刷题(12)-- 整数反转

整数反转

描述:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123输出: 321

示例 2:

输入: -123输出: -321

示例 3:

输入: 120输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

思路:

这道题总感觉以前见过,跟我们上一道做的反转字符串还是有一些些相似的,但我们不用建立另外的数组来反转整数,这里我们只需要进行相关的数学操作,每次拿出整数的最后一位,放到新建的整数变量 rev 后面,最后,rev便和 x 完全相反了。

代码如下:

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

这是代码第一版,思路很简单,但是我们忽略了一个问题,那便是当 rev = rev * 10 + pop 会发生溢出,我们这里需要做溢出判断。

假设 rev 为正数,如果 rev = rev * 10 + pop 发生溢出,那么一定有 rev >= INTMAX / 10 。

同样的,当 rev 为负数时,rev <= INTMIN / 10 会发生溢出。

同时我们需要注意 pop 的数值,题目中整数的数值范围为 [−2^31, 2^31 − 1],2^31-1=2147483647,-2^31=-2147483648,注意最后一位数。

我们修改我们的代码,添加条件,当发生溢出时返回 0 。

完整代码如下:

public class ReverseInt {    public int reverse(int x) {        int rev = 0;        while (x != 0) {            int pop = x % 10;            x /= 10;            if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) {                return 0;            }            if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) {                return 0;            }            rev = rev * 10 + pop;        }        return rev;    }    public static void main(String[] args) {        int x = -321;        ReverseInt reverseInt = new ReverseInt();        System.out.println(reverseInt.reverse(x));    }}

转载于:https://www.cnblogs.com/weixuqin/p/10256906.html

你可能感兴趣的文章
Git核心技术:在Ubuntu下部署Gitolite服务端
查看>>
平面波展开法总结
查看>>
建造者模式
查看>>
ArraySort--冒泡排序、选择排序、插入排序工具类demo
查看>>
composer 安装laravel
查看>>
8-EasyNetQ之Send & Receive
查看>>
Android反编译教程
查看>>
List<string> 去重复 并且出现次数最多的排前面
查看>>
js日志管理-log4javascript学习小结
查看>>
Android之布局androidmanifest.xml 资源清单 概述
查看>>
How to Find Research Problems
查看>>
Linux用户管理
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
使用iperf测试网络性能
查看>>
图片的显示隐藏(两张图片,默认的时候显示第一张,点击的时候显示另一张)...
查看>>
Docker 安装MySQL5.7(三)
查看>>
python 模块 来了 (调包侠 修炼手册一)
查看>>
关于CSS的使用方式
查看>>
分析语句执行步骤并对排出耗时比较多的语句
查看>>