Leetcode 整数反转

博客围绕32位有符号整数反转问题展开。介绍了题目,需按顺序取数、反转并判断范围,还得考虑溢出。给出C++解题代码,解析时提及三目运算符使用,以及防止溢出的方法。最后作者反思自身代码冗长,学习他人简洁思路。

整数反转

题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。

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

示例

输入:x = -123
输出:-321
输入:x = 120
输出:21

C++解题代码

class Solution {
public:
    int reverse(int x) {
     int Sign = (x < 0 ? -1: 1); 
     int y = abs(x);
     int length = 0;
     int rem;
     int newx=0;
     int num=0; 
     
     while(y>0)
     {
         y=y/10;
         length++;
     }
  y=abs(x);
      while(y>=1)
      {
          rem=y%10;
          y=y/10;
          //Determine if there is overflow
          if(num==0&&((rem*pow(10,(length-1)))>(pow(2,31))))
          {
              return 0;
          }
          if(num!=0&&(newx+rem*pow(10,(length-1)))/10>(pow(2,31)/10))
          {
              return 0;
          }
          newx+=rem*pow(10,(length-1));
          length--;
          num++;
      }
    newx=Sign*newx;
    return ((-1*pow(2,31)<=newx)&&(newx<=(pow(2,31)-1))?newx:0);
    }
};

题目解析

由题目描述与示例不难看出,想做出这道题需要解决以下几个问题:

  1. 按顺序取出x中的每位数字
  2. 利用取出的数字把x反转组成一个新的数字
  3. 判断这个新的数字是否在范围内并输出相应答案
  4. 题目假设不允许存储64位整数,所以要考虑在计算过程中溢出怎么办(我一开始也没考虑到这个)

代码解析

三目运算符

考虑到可能有负数,首先我把x的单独存了一下,后续都是对x的绝对值进行操作,最后再给反转后的数字加上符号即可,但其实直接对x进行操作也是可以的,这个我们后续再说,这里用到了一个三目运算符。三目运算符表达式如下:

Exp1 ? Exp2 : Exp3;

若Exp1对应的表达式为真,则返回Exp2表达式对应的值,反之则返回Exp3表达式对应的值。与if, else语句的作用类似。更多内容请参考下面的网址。

C++ 条件运算符 ? :

除此之外剩下的内容就比较简单了,不过我写的比较复杂,先是计算了一下x有几位数字,后续反转时会用到,为了按顺序取出x中的数字,我在循环里每次将x的值除10取余,这样就能按顺序从低位到高位取出x中的每位数字。反转时则根据刚刚得出的x的位数把取出的数字乘以相应的10的幂次再求和即可。最后再把x的符号与反转后的数字相乘,最后判断是否满足范围要求再输出即可。

防止溢出

刚开始一直没想出来,参考的官方结题思路,其实只要在赋值给int类型之前把原来那个值除10跟最大值比即可,因为我写的代码比较奇怪?所以还需要额外判断一下初始的情况。至于负号的情况,我想了一下应该不需要额外判断。

运行结果

Cache_-76851822eff97f50..jpg

学习与反思

看了评论里大家的代码后,感觉自己写的太冗长了,参考评论区一位大神的代码,截图如下:

QIC7ABN1}01RAJOU~YBUD{U.png

我的思路跟这位大神基本一致,也用到了取余然后x每次除10的方法,但人家的代码明显更简洁,不需要计算x的位数,可以直接将题目解析中的第一步和第二步结合起来。虽然这位大神也没考虑溢出的情况,但人家的思路也非常值得我学习。

AI 代码审查Review工具 是一个旨在自动化代码审查流程的工具。它通过集成版本控制系统(如 GitHub 和 GitLab)的 Webhook,利用大型语言模型(LLM)对代码变更进行分析,并将审查意见反馈到相应的 Pull Request 或 Merge Request 中。此外,它还支持将审查结果通知到企业微信等通讯工具。 一个基于 LLM 的自动化代码审查助手。通过 GitHub/GitLab Webhook 监听 PR/MR 变更,调用 AI 分析代码,并将审查意见自动评论到 PR/MR,同时支持多种通知渠道。 主要功能 多平台支持: 集成 GitHub 和 GitLab Webhook,监听 Pull Request / Merge Request 事件。 智能审查模式: 详细审查 (/github_webhook, /gitlab_webhook): AI 对每个变更文件进行分析,旨在找出具体问题。审查意见会以结构化的形式(例如,定位到特定代码行、问题分类、严重程度、分析和建议)逐条评论到 PR/MR。AI 模型会输出 JSON 格式的分析结果,系统再将其转换为多条独立的评论。 通用审查 (/github_webhook_general, /gitlab_webhook_general): AI 对每个变更文件进行整体性分析,并为每个文件生成一个 Markdown 格式的总结性评论。 自动化流程: 自动将 AI 审查意见(详细模式下为多条,通用模式下为每个文件一条)发布到 PR/MR。 在所有文件审查完毕后,自动在 PR/MR 中发布一条总结性评论。 即便 AI 未发现任何值得报告的问题,也会发布相应的友好提示和总结评论。 异步处理审查任务,快速响应 Webhook。 通过 Redis 防止对同一 Commit 的重复审查。 灵活配置: 通过环境变量设置基
【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器的状态空间平均模型的建模策略。该方法通过数学建模手段对直流微电网系统进行精确的状态空间描述,并对其进行线性化处理,以便于系统稳定性分析与控制器设计。文中结合Matlab代码实现,展示了建模与仿真过程,有助于研究人员理解和复现相关技术,推动直流微电网系统的动态性能研究与工程应用。; 适合人群:具备电力电子、电力系统或自动化等相关背景,熟悉Matlab/Simulink仿真工具,从事新能源、微电网或智能电网研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网的动态建模方法;②学习DC-DC变换器在耦合条件下的状态空间平均建模技巧;③实现系统的线性化分析并支持后续控制器设计(如电压稳定控制、功率分配等);④为科研论文撰写、项目仿真验证提供技术支持与代码参考。; 阅读建议:建议读者结合Matlab代码逐步实践建模流程,重点关注状态变量选取、平均化处理和线性化推导过程,同时可扩展应用于更复杂的直流微电网拓扑结构中,提升系统分析与设计能力。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值