[LeetCode] 颠倒整数

颠倒整数


英文描述

Given a 32-bit signed integer, reverse digits of an integer.

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 hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.


中文描述

给定一个范围为 32 位 int 的整数,将其颠倒。

例 1:
输入: 123
输出: 321

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

例 3:
输入: 120
输出: 21

注意:

假设我们的环境只能处理 32 位 int 范围内的整数。根据这个假设,如果颠倒后的结果超过这个范围,则返回 0。


使用stl库的std::string解题:

    int reverse(int x) 
    {
        int value = 0;
        int maxNumber = 2147483647;
        int minNumber = -2147483648;
        if (x == minNumber)
        {
            // 输入为最小负数 返回0
            return value;
        }
        string maxNumStr = to_string(maxNumber);
        bool isBigThanZero = (x > 0);
        // 将int数转为字符串
        string numString = to_string(abs(x));

        // 翻转string
        std::reverse(numString.begin(), numString.end());
        if (numString.length() == maxNumStr.length())
        {
            // 字符串比较
            if (numString.compare(maxNumStr) > 0)
            {
                return 0;
            };
        }

        int multiplier = 1;
        for (int index = numString.length() - 1; index >= 0; index--)
        {
            if (index == numString.length() - 1)
            {
                value = numString[index] - '0'; // 个位数
            }
            else
            {
                multiplier = multiplier * 10;
                value += multiplier*(numString[index] - '0');
            }
        }

        return isBigThanZero ? value : -value;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值