7. Reverse Integer

7. Reverse Integer




题目链接:7. Reverse Integer



题意

将给定的int型整数翻转,不包括负号,如果整数以0结尾,反转后开头的0不保留。

翻转的结果可能超过int的表示范围,如果超出范围返回0。

解法

先将整数转变为它的绝对值,每次将整数的末位数字压入一个队列中,然后将队列中的个位数每次从队首取出一个,添加到一个long long类型变量末尾,最后将该变量与INT_MAX比较,如果大于INT_MAX,返回0,否则先强制类型转换为int类型,然后根据原整数的符号决定是否将结果变为附属再返回。



代码

class Solution {
public:
    int reverse(int x) {
        long long result=0, maxNeg=2147483648;
        queue<int> s;
        long long temp = abs((long long)x);

        while(temp){
            s.push(temp % 10);
            temp/=10;
        }
        /**
        如何检验翻转后的数字是否溢出int的表示范围 
        1.先将翻转结果用long long类型表示,然后与INT_MAX比较,若不溢出再强制类型转化为int 
        */
        if(!s.empty()){
            result+=s.front();
            s.pop();
        }
        while(!s.empty()){
            result*=10;
            result+=s.front();
            s.pop();
        }

        if(result > INT_MAX){
            return 0;
        }else{
            if(x > 0) return (int)result;
            else return (int)-result;
        }
    }
};




算法复杂度

算法复杂度为O(n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值