leetcode7.整数反转

该文章描述了一个用于32位有符号整数反转的算法,通过逐位取出数字,逆序累加到结果变量中,同时检查是否会超出整数范围。在每一步中,都需要确保反转后的数字不会导致溢出。例如,反转123会得到321,而反转-123则得到-321。

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

整数反转

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

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

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


示例 1:

输入:x = 123

输出:321


示例 2:

输入:x = -123

输出:-321

最优解决方案

去掉符号单独处理。使用一个变量来存储反转后的数字,然后每次从原始数字的末尾取出一位数字,反转后的数字乘以 10 并加上末尾数字。它必须小于等于(INT_MAX-末尾数字) / 10 才能继续乘以 10,否则就返回 0。


假设我们要反转一个三位数 123。我们可以用以下步骤来实现:

  • 初始化一个变量 rev = 0,用来存储反转后的数字。
  • 取出原始数字 x 的最低位,即 x % 10 = 3,并将其乘以 10 并加到 rev 上,即 rev = rev * 10 + x % 10 = 0 * 10 + 3 = 3。
  • 将原始数字 x 右移一位,即 x = x / 10 = 123 / 10 =12。
  • 检查 rev 是否超过了 [-2^31,2^31-1] 的范围,如果超过了就返回0。
  • 取出原始数字 x 的最低位,即 x % 10 =2,并将其乘以10并加到rev上,即rev=rev10+x%10=310+2=32。
  • 将原始数字x右移一位,即x=x/10=12/10=1。
  • 检查rev是否超过了[-2^31,2^31-1]的范围,如果超过了就返回0。
  • 取出原始数字x的最低位,即x%10=1,并将其乘以10并加到rev上,即rev=rev10+x%10=32*10+1=321。
  • 将原始数字x右移一位,即x=x/10=1/10=0。
  • 检查rev是否超过了[-2^31,2^31-1]的范围,如果超过了就返回0。
  • 返回rev作为结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值