题意思路:

一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。
方法一:暴力法

可以将数字从最低位向最高位枚举得到反转数字ans存储于long long ,然后将ans强制类型转换为int
若ans转换的数字与long long类型不相等则发生溢出,
否则则没有发生溢出,
要记得处理数字小于零的情况;

复杂度分析:

时间复杂度:O(m),m为数字长度,遍历数字各位的数字。

空间复杂度:O(1);存储与读取数据

图文详解:
图片说明
翻转每一位数字即可,原理比较简单,我们直接来看图分析;

标程:

class Solution {
public:

    int reverse(int x) {
        long long ans=0;
        bool flag=0;
        if(x<0)flag=1;//如果为负数要记得转换
       while(x){//从最低位依次枚举
           ans*=10;//先乘后加
           ans+=x%10;
           x/=10;
       }//x等于0则表示结束
       if(flag)x*=-1;//强制类型转换比较得到答案
       if(ans!=(int)ans)return 0;
        else return ans;
    }
};

方法二:通过字符串处理
将x数字转换为字符串处理,然后依次从右向左枚举字符,实现数字的反转。
若ans转换的数字与long long类型不相等则发生溢出,
否则则没有发生溢出,
要记得处理数字小于零的情况,注意字符与数字转换;

复杂度分析:

时间复杂度:O(m),m为数字长度,遍历数字各位的数字。

空间复杂度:O(m);存储与读取数据
标程:

class Solution {
public:

    int reverse(int x) {
        string s;
        long long ans=0;
        s=to_string(x);//将x数字转换为字符串处理
        for(int i=s.size()-1;i>=0;i--){//从右到左枚举每一位字符
            if(s[i]=='-')ans*=-1;//如果字符等于负号,将ans表示为负数
            else ans*=10,ans+=s[i]-'0';//如果为数字则ans依次增加,先乘后加
        }//注意字符与数字转换
        if(ans==(int)ans)return ans;//强制类型转换比较
        else return 0;
    }
};