(LeetCode每日一刷02)反转整数

题目描述:

给定一个 32 位有符号整数,将整数中的数字进行反转。

注意:

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

示例:

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

我提交的代码:

​
class Solution {
public:
    int reverse(int x) {
        bool symbol = 1;   //默认x为正数
        int remainder;     //余数
        std::vector<int> numVec;  //存放每一位上的数字
        
        if (x == 0)    //0作为特殊处理
            return 0;
              
        if (x < 0)    //负数取余特殊,直接转成正数
        {
            x = abs(x); 
            symbol = 0;
        }
        
        for(; x != 0; )
        {
            remainder = x % 10;
            numVec.push_back(remainder);
            x = x / 10;
        } 
        
        int vector_size = numVec.size();
        int i;
        double rslt = numVec[vector_size - 1]; //这里要设置为double,不然后面会溢出
        for (i = 0; i < vector_size - 1; i++)
        {
            int j = vector_size - i - 1;
            rslt = rslt + numVec[i] * pow(10,j);
        }
        
        if (symbol == 0)
        {
            rslt *= -1;
        }
        
        if(rslt > pow(2,31) - 1 || rslt < (-1 * pow(2,31)))
        {
            rslt = 0;
        }
        
        return rslt;
    }
};

​

代码运行时间:16ms。大概75.71% 的用户。

猜你喜欢

转载自blog.csdn.net/songsong2017/article/details/83991300
今日推荐