LeetCode之(7)整数反转(Reverse Integer)

0007.整数反转(Reverse Integer)

题目描述

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

题目分析

为了正确进行转换,采用了字符串进行中间的转换操作。

首先判断输入数字的正负,保留数字的正负信息。然后将数字转换成字符串,对字符串进行翻转,对于新的字符串比较与边界值的大小关系,并输出正确的结果。

相较而言,python对于字符串的操作比较简单,且对于数字的取值范围相交C++和Java比较广,函数使用也比较方便,实现起来更容易。

代码实现

C++

/*
 * @lc app=leetcode.cn id=7 lang=cpp
 *
 * [7] 整数反转
 */

// @lc code=start
class Solution {
public:
    int reverse(int x) {
        int sign = 1;//符号位,1:+,-1:-
        
        if(x < 10 && x > -10){
            return x;
        }
        if(x < 0){
            sign = -1;
        }

        int shang = x, yu;
        int flag = 0;//标志位,0:前导零部分,1:非前导零部分
        string x_reverse = "";
        while(shang != 0){
            yu = shang % 10 * sign;
            shang /= 10;
            if(yu != 0){
                flag = 1;
            }
            if(flag == 1){
                x_reverse.push_back(yu+'0');
            }            
        }
        
        string max1 = "2147483647";
        string max_1 = "2147483648";
        if(x_reverse.size()==10){
            if(sign == 1){
                if(x_reverse > max1){
                    return 0;
                }
            }
            else if(sign == -1 ){
                if(x_reverse > max_1){
                    return 0;
                }
            }
        }
        int ans = 0;
        for(int i = 0; i < x_reverse.size(); i++){
            ans = ans*10 + (x_reverse[i]-'0');
        }
        return ans*sign;
    }
};
// @lc code=end


Java

/*
 * @lc app=leetcode.cn id=7 lang=java
 *
 * [7] 整数反转
 */

// @lc code=start
class Solution {
    public int reverse(int x) {
        int sign = 1;
        
        if(x < 10 && x > -10){
            return x;
        }        

        int tmp = x;
        while(tmp % 10 == 0){
            tmp /= 10;
        }
        String x_input = String.valueOf(tmp);

        if(x < 0){
            sign = -1;
            x_input = x_input.substring(1);
        }

        StringBuffer xb = new StringBuffer(x_input);
        String x_reverse = xb.reverse().toString();
        String max1 = "2147483647";
        String max_1 = "2147483648";

        if(x_reverse.length() == 10){
            if(sign == 1){
                if(x_reverse.compareTo(max1) > 0){
                    return 0;
                }
            }
            else if(sign == -1){
                if(x_reverse.compareTo(max_1) > 0){
                    return 0;
                }
            }
        }
        return Integer.parseInt(x_reverse)*sign;
    }
}
// @lc code=end


Python

#
# @lc app=leetcode.cn id=7 lang=python3
#
# [7] 整数反转
#

# @lc code=start
class Solution:
    def reverse(self, x: int) -> int:
        sign = 1
        if(x < 0):
            sign = -1
            x = -x
        x_reverse = int(str(x)[::-1])*sign
        if(x_reverse >= -2147483648 and x_reverse <= 2147483647):
            return x_reverse
        else:
            return 0
# @lc code=end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值