这是悦乐书的第143次更新,第145篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第2题(顺位题号是7),给定32位有符号整数,然后将其反转输出。例如:

输入: 123

输出: 321

输入: -123

输出: -321

输入: 120

输出: 21

给定反转整数范围: [−2^31, 2^31 − 1],即在int的最小值、最大值之间,如果反转整数超过此范围,则返回0。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 分析题目

首先,特许情况是输入值为0,可以直接输出0。

第二步,因为会后负数出现,先判断是否为负数,留下标记,因为处理数据的过程中,操作正数方便于操作负数,这里利用Math.abs()函数取绝对值。

第三步,反转数据。例如: 1223 取反为 3221

最后一位数 = 1223%10 = 3

倒数第二位数 = 122%10 = 2, 其中122是1223除以10后的数

倒数第三位数 = 12%10 = 2, 其中12是122除以10后的数

倒数第四位数 = 1%10 = 1, 其中1是12除以10后的数

拿到反转的数 31000 + 2100 + 210 + 1 = 3221

可以进一步分析反转的数是怎么来的:

0x10 + 3 = 3

3x10 + 2 = 32

32x10 + 2 = 322

322x10 + 1 = 3221

反转的数是原数对10取余的余数从个十百位依次向前移动 加上 新的余数

第四步,判断是否超出范围,是则返回0,否则判断符号标记,还原符号。对于还原符号的操作,可以直接加上“-”号,也可以用0减反转后的数,也可以利用Math.negateExact()函数。

public int reverse(int x) {
int result = 0;
if (0 == x) {
return 0;
}
boolean flag = false;
if (x < 0) {
flag = true;
}
int tem = Math.abs(x);
long afterreverse = 0;
while (tem > 0) {
afterreverse = afterreverse*10 + tem%10;
tem /= 10;
}
if (flag) {
afterreverse = 0 - afterreverse;
}
if (afterreverse > Integer.MAX_VALUE || afterreverse < Integer.MIN_VALUE) {
result = 0;
} else {
result = (int)afterreverse;
}
return result;
}

03 取巧的解法

将其转为字符串,利用StringBuilder类的reverse()方法,省去循环处理整数的步骤。

public int reverse2(int x) {
if (0 == x) {
return 0;
}
String flag = "";
if (x < 0) {
flag = "-";
}
String str = String.valueOf(Math.abs(x));
StringBuilder sb = new StringBuilder(str);
String afterreverse = sb.reverse().toString();
if (afterreverse.length() >10) {
return 0;
}
long x_reverse = Long.parseLong(flag+afterreverse);
if (x_reverse > Integer.MAX_VALUE || x_reverse < Integer.MIN_VALUE) {
x_reverse = 0;
}
return (int)x_reverse;
}

04 小结

本题需要注意的是符号和反转后是否会溢出的情况,其次尾数是0的情况,在两种解法中都涵盖进去了,不需要额外考虑。

如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

本文首发于我的个人公众号:悦乐书,转载请注明出处!

【算法】LeetCode算法题-Reverse Integer的更多相关文章

  1. 乘风破浪:LeetCode真题_007_Reverse Integer

    乘风破浪:LeetCode真题_007_Reverse Integer 一.前言 这是一个比较简单的问题了,将整数翻转,主要考察了取整和取余,以及灵活地使用long型变量防止越界的问题. 二.Reve ...

  2. leetcode第七题Reverse Integer (java)

    Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, retu ...

  3. 《LeetBook》leetcode题解(7): Reverse Integer[E]——处理溢出的技巧

    我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 书的地址:https://hk029.gitbooks.io/leetboo ...

  4. C# 写 LeetCode easy #7 Reverse Integer

    7.Reverse Integer Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 ...

  5. Leetcode练习题 7. Reverse Integer

    7. Reverse Integer 题目描述: Given a 32-bit signed integer, reverse digits of an integer. Example 1: Inp ...

  6. leetcode第七题--Reverse Integer

    Problem: Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 ...

  7. (算法)LeetCode刷题

    LeetCode 56 合并区别 Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 关键就是a[1]>=b[0] 也就 ...

  8. 【一天一道LeetCode】#7. Reverse Integer

    一天一道LeetCode系列 (一)题目 Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, ...

  9. leetcode:7. Reverse Integer

    这题简单,也花了我好长时间,我自己写的code比较麻烦,也没啥技巧:按正负性分类执行,先转化成字符串,用stringbuilder进行旋转,如果超出范围了就用try catch public int ...

随机推荐

  1. 响应者链UIResponder-扩大UIButton的点击范围

    在开发中,我们经常看到有按钮等的点击,会出现响应事件.按钮->view->ViewController->UIWindow->UIApplication,这就形成了一个响应链. ...

  2. C#操作DbCommand类

    一.常用属性 名称 说明 CommandText  获取或设置要对数据源执行的 Transact-SQL 语句.表名或存储过程 CommandTimeout 获取或设置在终止执行命令的尝试并生成错误之 ...

  3. 菜鸟入门【ASP.NET Core】15:MVC开发:ReturnUrl实现、Model后端验证 、Model前端验证

    ReturnUrl实现 我们要实现returnUrl,我们需要在注册(Register)方法中接收传进的returnUrl并给它默认值null,然后将它保存在ViewData里面 然后我们定义一个内部 ...

  4. MVC3中 ViewBag、ViewData和TempData的使用和区别(转载)

    在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是 ...

  5. XAML: 在 MVVM 模式中,关于绑定的几处技巧

    以下会提到三个绑定的技巧,分别是 在 ListView 中为 ListViewItem 的 MenuFlyout 绑定 Command: 在 ListView 的 事件中绑定所选择项目,即其 Sele ...

  6. Windows 10 安装 Mongod

    因为新换了Windows 10 电脑,需要在新电脑重新安装所有的软件,包括mongodb 下载文件:首先在mongodb的官方网站上下载最新版本的mongodb安装程序,https://www.mon ...

  7. Flask 系列之 HelloWorld

    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 创建一个显示 Hello World 页面的网站. 环境 ...

  8. Java马士兵高并发编程视频学习笔记(二)

    1.ReentrantLock的简单使用 Reentrant n.再进入 ReentrantLock 一个可重入互斥Lock具有与使用synchronized方法和语句访问的隐式监视锁相同的基本行为和 ...

  9. 判断文本是否溢出/hover显示全部

    前言 在工作中我们经常会遇到,文字过多,需要用省略号,并且鼠标hover的时候 还需要 显示全部的文字的需求. 正文 文字过多需要用省略号的实现:上代码啦 .ellipsis { width: 100 ...

  10. 弹性盒模型,flex布局

    弹性盒模型   弹性盒子是css3的一种新布局模式,由容器(父元素)和项目(子元素)组成. 弹性盒子是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式. 引入弹性盒模型的 ...