栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode journal《微软题库》- 整数反转

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode journal《微软题库》- 整数反转

题目:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例输入: 示例1:
输入:x = 123
输出:321
示例2:
输入:x = -123
输出:-321
示例3:
输入:x = 120
输出:21
示例4:
输入:x = 0
输出:0
提示:
  • -2^31 <= x <= 2^31 - 1
题解:

​ 首先,需要确定输入整型数的符号(正或者负);接下来需要确定这个数字反转后的大小是否超出了32位无符号整型数的范围。需要注意的是,这道题给了前提是环境不允许存储 64 位整数(有符号或无符号),那么最好不要使用到long long这一类的数据类型。

解法1

​ 确定好符号之后,可以使用循环的方式,每次获取末尾的一位数字,来存储新的数字。同时进行判断:新的数字大小是否在INT_MIN/10到INT_MAX/10的范围内,如果超出这个范围就返回0,如果没有就继续循环直到所有的数字都被反转。

解法2

​ 利用c++的异常处理机制,先使用to_string将整型数转换为字符串,再使用std中的reverse函数把字符串反转,最后把反转的字符串转换回整型数,在这个过程中,一旦出现了数据溢出,那么就会抛出异常,使用catch来返回0即可。

代码: 算法1:
class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {
                return 0;
            }
            int digit = x % 10;
            x /= 10;
            rev = rev * 10 + digit;
        }
        return rev;
    }
};
算法2
#include
class Solution {
public:
    int reverse(int x) {
        int sign=x>=0?1:-1;
        string s=to_string(x);
        int ans=0;
        try
        {
            std::reverse(s.begin(),s.end());
            ans=stoi(s);
        }catch(exception e)
        {
            return 0;
        }
        return ans*sign;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983614.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号