leetcode 7 Reverse Integer

来源:互联网 发布:拉圈圈网站源码 编辑:程序博客网 时间:2024/06/06 12:55

题目:

https://leetcode.com/problems/reverse-integer/description/

题意:

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321
Example 2:

Input: -123
Output: -321
Example 3:

Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

给一个整数,输出它的倒序数,如果倒序数超出了int范围,那么返回0

思路:

最简单的方法是longlong类型储存其倒序数,最后直接判断是否超出int范围即可。我写了另外一种方法,把INT_MININT_MAX和其倒序数都转换成字符串,然后比较大小,判断是否超出范围,这样全程不用long long,如果把题目输入数据改成long long,这样只要稍微修改就可以了

代码:

方法一:

class Solution {public:    int reverse(int x) {        long long rev_x = 0;        while(x)        {            rev_x = rev_x*10 + x%10;            x /= 10;        }        if(rev_x < INT_MIN || rev_x > INT_MAX)            return 0;        else            return (int)rev_x;    }};

方法二:

class Solution {public:    int reverse(int x) {        string intMaxStr = intToStrReverse(INT_MAX);        string intMinStr = intToStrReverse(INT_MIN);        std::reverse(intMaxStr.begin(), intMaxStr.end());        std::reverse(intMinStr.begin(), intMinStr.end());        int ans = 0;        bool positive = true;        if(x < 0)            positive = false;        string xStrReverse = intToStrReverse(x);        if(positive)        {            if(compareIntStr(xStrReverse, intMaxStr) <= 0)                ans = strToInt(xStrReverse, positive);            else                ans = 0;        }        else        {            if(compareIntStr(xStrReverse, intMinStr) <= 0)                ans = strToInt(xStrReverse, positive);            else                ans = 0;        }        return ans;    }private:    string intToStrReverse(int num)    {        if(num == 0)            return "0";        else        {            string ans = "";            while(num != 0)            {                ans += (char)(abs(num%10) + '0');                num /= 10;            }            string::size_type i = 0;            while(ans[i] == 0)                ++i;            return ans.substr(i);        }    }    int compareIntStr(const string &x, const string &y)    {        if(x.size() > y.size())            return 1;        else if(x.size() < y.size())            return -1;        else            return x.compare(y);    }    int strToInt(const string &str, bool positive)    {        int ans = 0;        for(string::size_type i = 0; i < str.size(); ++i)        {            if(positive)                ans = ans * 10 + (str[i]-'0');            else                ans = ans * 10 - (str[i]-'0');        }        return ans;    }};
原创粉丝点击