首页 > 其他分享 >LeetCode刷题(1)~整数反转

LeetCode刷题(1)~整数反转

时间:2023-01-12 15:36:58浏览次数:59  
标签:10 return int 反转 INT MAX reslut LeetCode 刷题


题目描述

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

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

解答 By 海轰

提交代码

class Solution {
public:
int reverse(int x) {
int reslut=0;
int b=0;
while(x!=0)
{

b=x%10;
x=x/10;
if(reslut>INT_MAX/10||(reslut==INT_MAX&&b>7)) return 0;
if(reslut<INT_MIN/10||(reslut==INT_MIN&&b<-8)) return 0;
reslut=reslut*10+b;
}
return reslut;
}
};

运行结果

LeetCode刷题(1)~整数反转_c++

思路
    根据题目描述,假设a=123,要求输出结果为321,也就是对原数中的各个数字进行逆序排列,所以需要取出原数中最后一个数字3,放在新数的第一位。那么怎么使得3是新数字的第一位呢?因为不知道一共有多少位!但是我们可以利用数的原理,321=3100+210+1*1,所以对3进行左移即可(其实就是乘以10)。

  1. 取出数的最后一位b,声明一个新变量a=0,a=a*10+b,原数字=原数字/10
  2. 只要原数字!=0 ,重复步骤1

注意:输入数类型为int,没有溢出,但是反转后的数字却是可以溢出的。所以在a=a*10+b之前,应该先判断此时a的大小。

  • 假设原数为正数,那么int类型最大值INT_MAX=2147483647,最小值INT_MIN=-2147483648。发生溢出的语句:a=a10+b,为了判断是否溢出,需要在执行这条语句之前对a进行判断,根据判断结果决定是否执行该条语句。若此时a>214748364(INT_MAX/10),那么无论b是何值,最后执行a=a10+b后,a必定溢出;若a=214748364,只有b>7时,最后a才会溢出。
  • 假设原数为负数,同理,若a<-214748364,则一定溢出;若a=-214748364,只要b<-8,则一定溢出

C++完整测试程序demo

#include<iostream>
using namespace std;
int reverse(int x) {
int reslut=0;
int b=0;
while(x!=0)
{
b=x%10;
x=x/10;
if(reslut>INT_MAX/10||(reslut==INT_MAX&&b>7)) return 0;
if(reslut<INT_MIN/10||(reslut==INT_MIN&&b<-8)) return 0;
reslut=reslut*10+b;
}
return reslut;
}
int main(){
cout<<"int类型 最大值:"<<INT_MAX<<endl;//查看int 最大值
cout<<"int类型 最小值:"<<INT_MIN<<endl;//查看int 最小值
// 测试
cout<<reverse(123)<<endl;
cout<<reverse(-123)<<endl;
cout<<reverse(120)<<endl;
return 0;
}

LeetCode刷题(1)~整数反转_ios_02

优化

class Solution {
public:
int reverse(int x) {
long result=0;
while(x!=0)
{
result=result*10+x%10;
x/=10;
}
return (result>INT_MAX||result<INT_MIN)?0:result;
}
};

LeetCode刷题(1)~整数反转_c++_03

官方解答

​https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode/​

其他解答

1.​​思路清晰,图文并茂,比较好理解​​​ 2.​​继续简化了代码(看出了题目的小bug,学习学习)​

标签:10,return,int,反转,INT,MAX,reslut,LeetCode,刷题
From: https://blog.51cto.com/u_15939722/6004357

相关文章