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: 输 ...
随机推荐
- VUE- 解决插件报错问题
VUE- 解决插件报错问题 解决办法:先删除node_modules整个文件夹,然后cnpm cache clean,然后cnpm install. cnpm cache clean时可能会提示 这 ...
- 一维消消乐(DP)
一维消消乐是一款非常简单的游戏.有n颗珠子排成一排,每一颗珠子有一个价值w(可能是负数). 游戏是这样,你可以选择如若干对相邻的珠子,让他们同时消去.每一对珠子的消失,都会使得总分数加上两颗珠子相乘的 ...
- pip常见使用方法
pip可以理解类似yum管理rpm包的管理python包工具 pip参数解释 pip --help Usage: pip <command> [options] Commands: ins ...
- tensorflow 损失计算--MSN
1.tf.losses.mean_squared_error函数 tf.losses.mean_squared_error( labels, predictions, weights=1.0, sco ...
- Django2.0——模板渲染(一)
在前面的介绍中我们都是用简单的 django.http.HttpResponse来把内容显示到网页上,本节将讲解如何使用渲染模板的方法来显示内容,即调用精美的HTML页面.模板的创建既可以在项目下创建 ...
- Iptables的规则语法
Iptables的规则语法 分类: 防火墙2012-04-19 17:09 1228人阅读 评论(0) 收藏 举报 inputtcpfilter防火墙output网络 (一) 基本语法 iptable ...
- Python内置文件
概述 为了提升效率,Python有些内置文件如 __pycache__.py 详解 1)__pycache__.py, python程序运行时不需要编译成二进制代码,而直接从源码运行程序 Python ...
- Java使用Sftp实现对跨服务器上传、下载、打包、写入相关操作
1.Maven引入jar <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch< ...
- webpack快速使用笔记
一.NPM1.NPM是随同NodeJS一起安装的包管理工具. http://www.1994july.club/?p=14542.安装npm install npm -gnpm -v 测试是否成功安装 ...
- ios ktvhttpcache 音视频缓存插件使用
1.PodFile 文件增加 pod 'KTVHTTPCache', '~> 2.0.0' 2.在终端 需要先cd到podfile文件所在目录 执行pod install 3.在header ...


