整数翻转-LeetCode No7

问题描述

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

代码

这个属于简单级别的代码,这里需要注意32位int型的范围就可以

class Solution {
public:
    int reverse(int x) {
        int cur_num = 0;
        // 判断是不是-2^31, 否则会出现溢出
        if(abs(x) == pow(2, 31)){
            return 0;
        }else{
            cur_num = abs(x);
        }
        // 使用long型,避免dst_num溢出
        long dst_num = 0;
        int single = 0;
        while(cur_num > 0){
            single = cur_num % 10;
            dst_num = dst_num * 10 + single;
            cur_num = cur_num / 10;
        }
        if(x<0){
            dst_num = -dst_num;
        }
        long threshold = pow(2, 31);
        if(dst_num < -threshold || dst_num >= threshold){
            dst_num = 0;
        }
        return dst_num;
    }
};

python 代码更简洁些

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
# 重点在于判断是否溢出, 32位的范围 [-2^31, 2^31)
class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        # 判断是否为负
        is_neg = True if x < 0 else False
        num_str = str(-x) if is_neg else str(x)
        # 赋值给新的字符串
        new_num_str = ''
        for i in range(len(num_str)-1, -1, -1):
            new_num_str += num_str[i]
        print(new_num_str)
        # 判断是否会溢出
        threshold = pow(2,31)  # 2147483648
        if is_neg and int(new_num_str) <= threshold:
            new_num = -int(new_num_str)
        elif not is_neg and int(new_num_str) < threshold:
            new_num = int(new_num_str)
        else:
            new_num = 0
        return new_num
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值