LeetCode_反转数字_代码思考

本文详细解析了如何在不超出32位有符号整数范围内,对一个给定的整数进行数字反转的算法实现。通过示例展示了正数、负数的反转过程,强调了处理过程中对溢出的判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:
给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

  • 问题分析:
    拿到这个问题时,思考一下,我们要对一个有符号的数字进行反转,我们要考虑的是我们处理的数字是有正负之分的,所以分析问题的时候不能遗漏了负数的情况。

  • 那好,到这里,我们假设现在有一个数字:123,我们要反转,那么是不是要把这个数字的各个位上的数字分别拿出来。对于拿出一个数字的各个位上的数,我们要记住一个经典的处理方式:

  • 第一步:int a1 = x%10 拿出x的余数。
    第二步: x = (x-a1)/10 去掉最后一位
    重复上两步,就能把x 的各个位上的数值取出。

  • 然后,我们考虑,此时我们已经可以拿出各个位上的数值了,那怎样把拿出来的单个数值合并为一个完整的数呢?这一步其实相对容易:算法就是将取出的数乘以相应的10的次方再相加就行。

  • 最后我们考虑一下,如果超出范围了,返回0即可。具体代码如下图所示:

在这里插入图片描述

  • 其实上述代码有些细节还是很有必要说明一下的。比如我们如何求一个数有几位呢?这里的技巧是将整数后面加上“”,这样整数就被转成字符串了,对于字符串我们可以用length();方法求得长度(码代码的时候记住length后面有括号)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值