LeetCode-Reverse Integer的一种算法

本文介绍了一种解决LeetCode逆序整数问题的算法,通过取余和除法操作翻转整数,并使用long类型防止32位整数溢出。文章详细解释了算法流程和溢出判断条件。

LeetCode-Reverse Integer的一种算法

题目链接:https://leetcode.com/problems/reverse-integer/description/

Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).

Example 1:
Input: 123
Output: 321

Example 2:
Input: -123
Output: -321

Example 3:
Input: 120
Output: 21

Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

由题意可知,本次题目要求我们将一个整数翻转过来,保留其正负。
需要注意的是,这个题目存在溢出的现象,所以需要判断翻转之后的数是否溢出。由于其溢出的判别是整形,所以计算时使用long来保存翻转后的数。
具体算法是将一个数翻转的算法流程是先取余得到个位数,然后放入新量中,同时原数除以十,删去被存放的个位数,而新量在得到新的个位数方式是先乘以十再相加。在得到结果后判断结果是否溢出。
具体算法如下:

class Solution {
public:
    int reverse(int x) {
        long ret = 0;
        while (x != 0) {
            ret = ret*10+x%10;		//乘十再加个位数
            x = x/10;               //除十删去个位数
        }
        if (ret < -2147483648 || ret > 2147483647) {  //判断溢出
            return 0;
        }
        return ret;
    }
};

本次算法唯一难点在于判断溢出与否,结果采用long形式保存也是为了更好的判断溢出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值