LeetCode算法题:整数反转

题目描述:

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

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

 

这个题目的“注意”是一个非常关键的信息,各位朋友在作者这道题的时候一定要注意。因为存在整数溢出现象,所以要额外考虑这种情况。还有就是要注意一下负数的负号,有些算法需要考虑负号,有些算法不用。下面给出求解本题的C++和Python代码。

C++:

class Solution {
public:
    int reverse(int x) {
        int number[11];
        int cnt=0,i;//cnt用来记录位数
        long result=0;//存储结果
        if(x==0){return 0;}//如果输入的是0,那么直接返回0
        else if(x<0){unsigned int x = -x;}//如果输入的是负数,那么用一个无符号整数存储x的绝对值
        while(x!=0){//遍历x的每一位
            if(cnt==0&&x%10==0){x/=10;continue;}//如果最后一位是0,那么反转后第一位是0,不符合要求,直接忽略掉,进行下一次循环
            if(cnt>10){return 0;}//int型数据位数最多是10位,如果超出10位那么一定溢出
            else{
                nuber[cnt++] = x%10;
                x/=10;
            }
        }
        int temp = cnt-1;
        for(i=0;i<cnt;i++){
            result += pow(10,temp)*number[i];
            temp--;
        }
        if(result>=pow(2,31)||result<pow(-2,31)){return 0;}//判断溢出的情况
        return result;
    }
};

 

Python:

class Solution:
    def reverse(self, x: int) -> int:
        str_x = str(x)//将整数x转换为字符串
        
        if x>0:
            str_x = str_x[::-1]//遍历字符串,“步伐”为-1,即倒序输出
            x = int(str_x)//最后转化为int型整数
        elif x==0:
            return 0
        else://x是负数的情况
            str_x = str_x[1:][::-1]
            x = int(str_x)
            x = -x
        
        return x if -2**31<=x<2**31 else 0
            
            
        

 

       因为本人水平比较低,所以C++代码编写的有点复杂,只是给各位朋友提供一种思路,建议想看更高效C++代码的朋友上网上去搜其他大牛的博客。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值