当前位置: 代码迷 >> 综合 >> 力扣7-整数反转(Reverse Integer)
  详细解决方案

力扣7-整数反转(Reverse Integer)

热度:80   发布时间:2023-11-04 21:11:34.0

题目

Given a 32-bit signed integer, reverse digits of an integer.
给出一个32位的有符号整数,进行反转

注意:

假设我们的环境只能存储得下 32 位的有符号整数, 则其数值范围为 [?2^31, 2^31 ? 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

例子

321----> 123
-210----->-12

解题思路

  1. 为什么要特别提出只能存得下32位这个概念,还必须要考虑溢出的情况
  2. 取余数就是最后一位的数,负号不影响结果
  3. 为什么通过(2^31-1)/10就可以知道是否溢出……因为输入的数也一定在范围内,所以x的第一位只能是1或者2,即res的最后一位只能是1或者2……最后得出结论不符合的数字无法输入,所以不用check。详见分析处

代码

class Solution {
    
public:int reverse(int x) {
    int res = 0;while (x != 0){
    if(abs(res) > INT_MAX/10) return 0;//溢出则返回0,为什么凭这个判断?res = res*10+x%10;x/=10;}return res;}
};

问题

如果题中没有限制必须存整型的变量,就也可以用long型变量保存计算结果,最后返回的时候判断是否在范围内。

  相关解决方案