Leetcode-整数反转

Leetcode-整数反转

题目描述

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

示例 1:

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

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

输入: 120
输出: 21
注意:

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

解题

刚开始的思路是将int型的数字转换为string型,再将string逆序,再转换为int型。

        double y;
        stringstream ss;
        ss<<x;
        string str1=ss.str();
        string str2;
        if (str1[0]=='-')
        {
            str2=string(str1.rbegin(),str1.rend());
            str2="-"+str2;
        }
        else{
            str2=string(str1.rbegin(),str1.rend());
        }
        ss.str("");
        ss<<str2;
        ss>>y;
        if(y<=-2147483648||y>=2147483647)
            return 0;
        return y;

在Leetcode上运行的时间是40ms,应该是类型转换降低了性能。

然后想着怎么用数字的方法逆序。
其实很简单,只要把每一位数字倒着取出存进新的变量中就好了,但是要注意int型的溢出检查。

int reverse(int x) {
        long res=0;
        while(x){
            res=res*10+x%10;
            x=x/10;
        }
        return (res > INT_MAX || res < INT_MIN) ? 0 : res;
}

发现提交后最快的执行用时是16ms,但是在Leetcode上执行同一代码的时间可能每次不太一样,我第一次执行这个代码的执行用时是40ms,后来多试几次感觉执行时间会快一点。
看到别人提交最快的执行用时是4ms,感觉自己差距还是很大啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值