LEETCODE - [7. 整数反转]

时间:2019-11-18
本文章向大家介绍LEETCODE - [7. 整数反转],主要包括LEETCODE - [7. 整数反转]使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

【题目】

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321
 示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21
注意:

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


【我的解法】

class Solution {
public:
    int maxNum = pow(2,31) - 1;
    int minNum = pow(-2,31);
    int reverse(int x) {
        //cout << maxNum <<"+" << minNum <<endl;
        string a = to_string(x);
        //cout << "source=" << a <<endl;
        int reversetemp;
        int index;
        int alen = a.length();
        for(index = 0; index < alen/2; ++index){
            reversetemp = a[index];
            a[index] = a[alen - index -1];
            a[alen - index -1] = reversetemp;
        }
        //cout << "reverse=" << a << endl;
        //去零
        index = 0;
        while(a[index] == '0'){
            index++;
        }
        if(index >= alen){
            return 0;
        }
        if(a[alen - 1] == '-'){
            return reverseNeg(&a[index]);
        }
        return reversePos(&a[index]);
    }
    int reverseNeg(string a) {
        int index;
        int alen = a.length();
        a[alen - 1] = '\0';
        //cout << "a=" << a << endl;
        long long retlong = 0;
        long long netRetLong = 0;
        int retint = 0;
        for(index = 0; index < a.length() - 1; ++index){
            int temp = (int)(a[index]) - '0';
            retlong = temp + retlong*10;
            netRetLong = -retlong;
            if(netRetLong < minNum){
                return 0;
            }
        }
        return (int)netRetLong;
    }
    int reversePos(string a) {
        int index;
        //cout << "a=" << a << endl;
        long long retlong = 0;
        int retint = 0;
        for(index = 0; index < a.length(); ++index){
            int temp = (int)(a[index]) - '0';
            retlong = temp + retlong*10;
            if(retlong > maxNum){
                return 0;
            }
        }
        return (int)retlong;
    }

};

【别人的解法】
int reverse(int x)
{
    int max = 0x7fffffff, min = 0x80000000;//int的最大值最小值
    long rs = 0;//用long类型判断溢出
    for(;x;rs = rs*10+x%10,x/=10);//逆序,正负通吃,不用单独考虑负值
    return rs>max||rs<min?0:rs;//超了最大值低于最小值就返回0
}

原文地址:https://www.cnblogs.com/wangqiwen-jer/p/11882425.html