0x00 问题描述

Given a 32-bit signed integer, reverse digits of an integer.
已知输入是一个32位的整数,将其进行十进制倒序

Example:

Input: 123
Output: 321

Input: -123
Output: -321

Input: 120
Output: 21

0x01 问题分析

需要注意问题强调是一个32位的整数,需要考虑倒序的输出是否会大鱼32位整数最大值,以及32位负数的时候是否小于最小值,防止溢出。使用while循环进行求余操作,既将输入除以10,其余数相当于当前操作的十进制数最后一位,将余数相加进结果并将上一次结果乘以10进行向左的位移。

0x02 Go代码

const int32_Max = 2147483647
const int32_Min = -2147483648
func reverse(x int) int {
    return_value := 0

    for {
        _mod := x%10
        x /= 10
        if return_value > int32_Max/10 || (return_value == int32_Max/10 && _mod > 7) {return 0}
        if return_value < int32_Min/10 || (return_value == int32_Min/10 && _mod < -8) {return 0}
        //判断上一个操作以及接下来的补位是否会导致溢出
        return_value = return_value*10 + _mod
        if x == 0 {break}
    }
    return  return_value
    
}

标签: Golang, LeetCode

评论已关闭