Leetcode7_整数反转
题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321示例 2:
输入: -123
输出: -321示例 3:
输入: 120
输出: 21注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解题要点
1.注意溢出: 超过最大值溢出 and 小于最小值溢出
图解算法
1.
2.
3.
解题思路
本题如果不考虑溢出问题,是非常简单的。解决溢出问题有两个思路,第一个思路是通过字符串转换加try catch的方式来解决,第二个思路就是通过数学计算来解决。
由于字符串转换的效率较低且使用较多库函数,所以解题方案不考虑该方法,而是通过数学计算来解决。
通过循环将数字x的每一位拆开(从个位向上拆)
注:例如x=123 则ans=3,pop=2
在计算新值时每一步都判断是否溢出。
溢出条件有两个,一个是大于整数最大值MAX_VALUE,另一个是小于整数最小值MIN_VALUE,设当前计算结果为ans,下一位为pop。
注:这里的大于整数最大值和小于整数最小值 指的是在取值范围内的最大最小值
从ans * 10 + pop > MAX_VALUE这个溢出条件来看
当出现 ans > MAX_VALUE / 10 且 还有pop需要添加 时,则一定溢出
当出现 ans == MAX_VALUE / 10 且 pop > 7 时,则一定溢出,7是2^31 - 1的个位数注:这就是相当于最后的结果是32*10+1,这个值是否大于或者小于溢出的条件
从ans * 10 + pop < MIN_VALUE这个溢出条件来看
当出现 ans < MIN_VALUE / 10 且 还有pop需要添加 时,则一定溢出
当出现 ans == MIN_VALUE / 10 且 pop < -8 时,则一定溢出,8是-2^31的个位数
官方代码
直接看官方题解最佳
上面描述了为什么需要提前判断他们的数字,而不是把他们算出来后,其实就是为了防止溢出,所以需要事先检查这个语句是否会溢出
class Solution {
public:
int reverse(int x) {
int rev = ;
while (x != ) {
int pop = x % ;
x /= ;
if (rev > INT_MAX/ || (rev == INT_MAX / && pop > )) return ;
if (rev < INT_MIN/ || (rev == INT_MIN / && pop < -)) return ;
rev = rev * + pop;
}
return rev;
}
};
官方代码改进版
如果不知道7 或者-8,可以直接计算出来,如下改动
class Solution {
public int reverse(int x) {
int rev = ;
while(x != ){
int pop = x % ;
x = x / ;
if(rev > Integer.MAX_VALUE / || (rev == Integer.MAX_VALUE / && pop > Integer.MAX_VALUE % )){
rev = ;
break;
}else if(rev < Integer.MIN_VALUE / || (rev == Integer.MIN_VALUE / && x < Integer.MIN_VALUE % )){
rev = ;
break;
}
rev = rev * + pop;
}
return rev;
}
}
代码1(错误)
遇到的问题:
这段代码自己也能看懂,也明白是什么意思,也可以通过leetcode的测试样例
但是但是就是提交失败,原因是执行错误,在第6行处的Integer
class Solution {
public int reverse(int x) {
int ans = ;
while (x != ) {
int pop = x % ;
if (ans > Integer.MAX_VALUE / || (ans == Integer.MAX_VALUE / && pop > ))
return ;
if (ans < Integer.MIN_VALUE / || (ans == Integer.MIN_VALUE / && pop < -))
return ;
ans = ans * + pop;
x /= ;
}
return ans;
}
}
代码2(正确)
这段代码的作者说上面那个代码判断溢出是很丑陋的,原因在于需要记住末尾数字
两者都是在计算新值时每一步都提前判断是否溢出。
用时8ms,官方用时4ms
class Solution {
public:
int reverse(int x) {
int res = ;
while (x != ) {
if (res < INT_MIN/) return ;
if (res > INT_MAX/) return ;
res *= ;
int m = x % ;
if (m < && res < INT_MIN - m) return ;
if (m > && res > INT_MAX - m) return ;
res += m;
x /= ;
}
return res;
}
};
原题链接
7. 整数反转
参考链接
碎碎念
2019-09-20 00:05:47
今天的我还是太菜了,本来这道题是9.18的,但是自己只是大概看懂算法了,所以还没实现,今晚就实现了下
17,19号的leetcode还没有刷,每天一道的话,再加上今天20号
少了3道题
那么今天就要刷三道easy
冲鸭
Leetcode7_整数反转的更多相关文章
- Leetcode(力扣) 整数反转
Leetcode 7.整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例: 输入: -123 输出: -321 注意: 假设我们的环境只能存储得下 32 位的有符 ...
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全 Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...
- C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数
各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 输出: 解释: 各位相加的过程为: + = , + = . 由于 是一位数,所以返回 . 进阶:你可以 ...
- leecode刷题(12)-- 整数反转
leecode刷题(12)-- 整数反转 整数反转 描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: - ...
- leetcode7_C++整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 输出: 示例 2: 输入: - 输出: - 示例 3: 输入: 输出: 注意: 假设我们的环境只能存 ...
- Leecode刷题之旅-C语言/python-7.整数反转
/* * @lc app=leetcode.cn id=7 lang=c * * [7] 整数反转 * * https://leetcode-cn.com/problems/reverse-integ ...
- ACM_整数反转
整数反转 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定一个32位int型的整数,把这个整数反着输出,如123,输出321. ...
- LeetCode Golang 7. 整数反转
7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. Tips : Math包给出的类型大小的边界: // Integer limit values. const ...
- 【Leetcode】【简单】【17. 整数反转】【JavaScript】
题目描述 7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321示例 3: 输 ...
随机推荐
- php魔术常量,_CLASS_,_METHOD_,_FUNCTION_
_CLASS_: 返回当前类的类名 _METHOD_:返回当前类方法的方法名(并显示类的调用,类名::方法名) _FUNCTION_:返回当前函数的函数名 _FILE_:当前文件的绝对路径(包含_FI ...
- 查看电脑连接的WiFi的密码
这里提供两种办法:图形界面操作版.命令行操作版 方法一: 打开控制面板 点击红色框部分 方法二 打开命令行:输入命令netsh wlan show profiles "连接的WiFi的名称& ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习: 表单验证
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Windows下C extension not loaded for Word2Vec, training will be slow.解决方法
在网上看了好多个博客,都没有很好解决,最后google.. 大概问题就是gensim库在安装时没有和其他一些包关联起来(可能是由于用pip安装的gensim导致这个问题),所以在用Word2Vec时没 ...
- 【记录】YAML 简易入门教程
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:"Yet ...
- 吴裕雄--天生自然ShellX学习笔记:Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...
- 01 语言基础+高级:1-8 File类与IO流_day08【 File类、递归】
day08[File类.递归] 主要内容 File类 递归 教学目标 能够说出File对象的创建方式 能够说出File类获取名称的方法名称 能够说出File类获取绝对路径的方法名称 能够说出File类 ...
- winEdt打开tex文件报错解决方法
写论文真的是不断遇到各种困难啊,这个Latex软件就很多,好不容易中个A1区的文章,期刊说更新了新的模板就下载了,忽然发现打开有reading error,看不到一点内容,神奇的是竟然可以运行.这样的 ...
- python导入自定义的库
一.导入项目文件夹下的模块 1.导入整个模块 import 模块名 2.导入模块的某个函数 from 模块名 import 函数名 示例 untitled是项目文件夹,文件结构如下 ①在a.py导入c ...
- Tomcat8 启动报错
Tomcat8启动报错: java.lang.NoSuchMethodError:javax.servlet.ServletContext.getClassLoader 在网上搜索后,发现此类问题大都 ...


