当前位置: 首页 > article >正文

力扣题目解析--整数反转

题目

给你一个 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

 代码展示

class Solution {
public:
    int reverse(int x) {
        string ret=to_string(x);
        int length=ret.size();
        string str="";
        if(ret[0]=='-'){
            str+="-";
        }
        for(int i=length-1;i>=0;i--){
            if (ret[i] != '-') {
                str += ret[i];
            }

        }
        try {
            int num = std::stoi(str);
            return num;
        } catch (const std::out_of_range& e) {
            // 如果转换失败(溢出),返回0
            return 0;
        }
    }
};

 

逐行解析

  1. 类定义

    class Solution {
    public:

    定义一个名为 Solution 的类,并声明一个公共成员函数 reverse

  2. 函数定义

    int reverse(int x) {

    定义一个公共成员函数 reverse,接受一个整数参数 x 并返回一个整数。

  3. 将整数转换为字符串

    string ret = to_string(x);

    使用 to_string 函数将整数 x 转换为字符串 ret

  4. 获取字符串的长度:

    int length = ret.size();

    获取字符串 ret 的长度,并将其存储在 length 变量中。

  5. 创建一个空字符串来存储反转后的结果

    string str = "";

    初始化一个空字符串 str,用于存储反转后的结果。

  6. 处理负号

    if (ret[0] == '-') {
        str += "-";
    }

    检查字符串 ret 的第一个字符是否为负号。如果是,将负号添加到结果字符串 str 中。

  7. 从后向前遍历字符串,将字符添加到结果字符串中

    for (int i = length - 1; i >= 0; i--) {
        if (ret[i] != '-') {
            str += ret[i];
        }
    }
    • 使用一个 for 循环从字符串 ret 的最后一个字符开始,向前遍历。
    • 在每次迭代中,检查当前字符是否为负号。如果不是,将其添加到结果字符串 str 中。
  8. 尝试将字符串转换为整数

    try {
        int num = std::stoi(str);
        return num;
    } catch (const std::out_of_range& e) {
        // 如果转换失败(溢出),返回 0
        return 0;
    }
    • 使用 try 块尝试将结果字符串 str 转换为整数 num
    • 如果转换成功,返回 num
    • 如果转换失败(例如,溢出),捕获 std::out_of_range 异常并返回 0

总结

  • 字符串转换:使用 to_string 将整数转换为字符串。
  • 处理负号:在遍历字符串时,先处理负号,确保负号被正确添加到结果字符串中。
  • 字符串反转:从后向前遍历字符串,将字符添加到结果字符串中。
  • 整数转换:使用 std::stoi 将结果字符串转换为整数,并捕获可能的异常。

这个题相比于回文数。最困难的一点其实在于溢出这个异常处理 


http://www.kler.cn/a/378957.html

相关文章:

  • 如何对LabVIEW软件进行性能评估?
  • MySQL之JDBC入门详解
  • 初始JavaEE篇——多线程(5):生产者-消费者模型、阻塞队列
  • 气象大模型学习笔记
  • IsADirectoryError: [Errno 21] Is a directory: ‘xxxxx/.ipynb_checkpoints‘
  • C++线程异步
  • Docker部署SQLServer教程(配置持久化)
  • PCD可视化(C++)
  • 一个git相关的cve:CVE-2024-32002
  • Android Studio插件版本与Gradle 版本对应关系
  • sql注入——靶场Less1
  • 请以鸿蒙生态崛起,开发者有哪些机遇与挑战
  • 探索PickleDB:Python中的轻量级数据存储利器
  • Rust 力扣 - 1984. 学生分数的最小差值
  • 国标GB28181软件EasyGBS国标GB28181网页直播平台在邮政快递场景中的应用
  • Web应用性能测试工具 - httpstat
  • Centos环境下安装docker
  • 红帽9—使用yum源部署docker
  • 做接口自动化遇到的20个难点,记录下我是如何解决的!
  • 什么是RabbitMQ
  • linux的文件IO操作---read函数如何退出
  • 使用Mac如何才能提高OCR与翻译的效率
  • SpringBoot技术栈:在线试题库系统深度开发
  • ElastricSearch 原理以及简单实用(超级通俗)
  • 5、reactive
  • 【保姆级教程】实操 Linux 磁盘管理:硬盘选型 分区挂载