当前位置:网站首页>LeetCode50天刷题计划(Day 6—— 整数反转 14.20-15.20)
LeetCode50天刷题计划(Day 6—— 整数反转 14.20-15.20)
2022-08-01 14:45:00 【国际知名观众】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
今天的题好简单
一、题目
整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示
-231 <= x <= 231 - 1
二、思路
1.python
没啥难度,输入后和输出前判断两次范围,中间无脑反转字符串就行了
需要注意python切片步长为-1时下标是从后往前算的,其中s【start,end,-1】中,切出[start,end)的序列(已反转),故end是小下标,start是大下标。
2.c++
传统做法应该是数学方法,while循环取模求余依次得到从后往前的每一位(cur=x%10;x=x/10),
对于每一位把他加入结果result中(result=result*10+cur)
需要注意:
① INT_MAX = 2^31-1,INT_MIN= -2^31
②在形成结果的过程中不断判断范围,一旦出现上溢出或下溢出,立即返回0
本题假设环境不允许存储 64 位整数,因此输入不会有溢出,只能是在反转的过程中,在形成result中出现溢出。也就是result*10+num>INT_MAX or result*10+num<INT_MIN;为了在计算前判断,则通过逆运算有:
上溢出条件:
下溢出条件:
③复杂度分析
log(x)相当于取x的位数,因为要遍历x的每一位
空间上只需要原地乘,O(1)
三、代码
1.python
class Solution:
def reverse(self, x: int) -> int:
#计算上下边界
edge=pow(2,31)
down=-edge
up=edge-1
#如果在边界外,返回0
if(x<down or x>up):
return 0
#如果是负数,先将去掉符号的部分转为字符串然后反转然后转为int然后加上符号
if(x<0):
re=-(int(str(x)[:0:-1]))
#正数不用在意负号,直接反转即可
else:
re=int(str(x)[::-1])
#要保证输出的结果也在范围内
if(re<down or re>up):
return 0
else:
return re

2.c++
class Solution {
public:
int reverse(int x) {
//结果
int result=0;
//当前数字
int cur = 0;
//遍历每一位
while(x != 0){
cur = x%10;
x/=10;
if(result>INT_MAX/10 || result == INT_MAX/10 && cur>INT_MAX%10){
return 0;
}
if(result<INT_MIN/10 || result == INT_MIN/10 && cur<INT_MIN%10){
return 0;
}
result = result*10 + cur;
}
return result;
}
};

边栏推荐
猜你喜欢
随机推荐
荣信文化通过注册:年营收3.8亿 王艺桦夫妇为实控人
微服务原生案例搭建
牛客刷SQL--5
0-1背包问题的一维数组优化解析
搭建ntp时间服务器(安装sql2000配置服务器失败)
The soul asks: How does MySQL solve phantom reads?
性能优化——资源优化笔记
引用js报错$ is not defined解决办法
Row locks in MySQL
牛客刷SQL--4
MBI5020 LED驱动
你真的会测试用户登录吗?
A Beginner's Guide to Performance Testing
阿里巴巴测试开发岗P6面试题
Pytorch —— 分布式模型训练
牛客刷SQL--6
有限合伙人与普通合伙人的区别
SQL每日一练(牛客新题库)——第3天: 条件查询
MySQL中的时区设置
MySQL:索引









