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

news/2024/11/1 10:37:53/

题目

给你一个 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) {// 如果转换失败(溢出),返回0return 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) {// 如果转换失败(溢出),返回 0return 0;
    }
    • 使用 try 块尝试将结果字符串 str 转换为整数 num
    • 如果转换成功,返回 num
    • 如果转换失败(例如,溢出),捕获 std::out_of_range 异常并返回 0

总结

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

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


http://www.ppmy.cn/news/1543556.html

相关文章

TensorFlow_T4 猴痘病识别

目录 一、前言 二、前期准备 1、设置GPU 2、导入数据 3、查看数据 三、数据预处理 1、加载数据 2、可视化数据 3、再次检查数据 4、配置数据集 四、构建CNN网络 五、编译 六、训练模型 七、模型评估 1、Loss and Acurracy图 2、指定图片进行预测 一、前言 &#…

css 对称按钮,中间斜平行间隔,两头半圆

序&#xff1a;稍一看&#xff0c;挺好看&#xff0c;看也简单&#xff0c;实现起来应该也是一样&#xff0c;没什么难度&#xff0c;分分钟完成。后面将其他的UI做了七七八八后&#xff0c;到这个按钮的时候&#xff0c;不知怎么&#xff0c;突然卡机了&#xff0c;想不起来怎…

Android——动态注册广播

BroadcastReceiver 发送一条广播&#xff0c;可以被不同的广播接收者所接收&#xff0c;广播接收者收到广播后再进行逻辑判断。 标准广播 通过 new BroadcastReceiver() 创建广播 通过 registerReceiver() 注册广播 通过 sendBroadcast() 发送广播 通过 unregisterReceiver(…

LSTM——长短期记忆神经网络

目录 1.LSTM 工作原理 2.LSTM的代码实现 3.代码详解 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;用于解决长序列中的长期依赖问题。它通过引入门机制&#xff0c;控制信息的流入、保留和输出&…

Spring Boot框架下校园社团信息管理的创新实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

练习LabVIEW第二十八题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第二十八题&#xff1a; 建立一个VI&#xff0c;模拟滚动—个骰子(骰子取值1~6)&#xff0c;跟踪骰子滚动后的取值出现次数…

Router和route区别

Router和route在Vue.js框架中扮演着不同的角色&#xff0c;它们有着很大的区别&#xff1a; 一、定义与概念 1、Router&#xff1a; Vue Router是Vue.js官方提供的一种路由管理器&#xff0c;它是一个Vue.js插件。 Router用于管理应用程序的路由规则和状态&#xff0c;包括…

使双向链表的迭代器和vector一样支持加法和减法。

例子&#xff1a; int main() { vector<int> vec { 1,2,3,4,5,7,8,9 };auto n alg.find_binary_insert_pos(vec.begin(), vec.end(), 6);vec.insert(vec.begin() n, 6);_pn(vec);list<int> vec2 { 1,10,11,9,5 };for (auto& v : vec2) {//添加不存在的…