原题链接在此 https://leetcode.cn/problems/reverse-integer/

一个常见的算法问题是反转正整数:将 12345 变成 54321。乍一看,这个问题似乎很简单——将整数转为字符串,然后转为数组,反转数组,然后将其转为字符串,最后再次化为整数。虽然该解决方案可能会得到“54321”,但这并不是解决问题的最佳方法。

如果算法的输入值是整数,并且预期输出是整数,那么问题的最佳解决方案不涉及将整数转换为另一种数据类型。相反,要解决简单的“反转整数”问题,您应该使用模和简单的数学。

首先要做的是编写一个函数,我将其称为reverseNum,它接受一个数字。然后,初始化一个新变量,调用result并将其设置为零。结果就是你最终将返回的结果:

function reverseNum(num) {
    let result = 0

    //...

    return result
}

现在,您想要对数字执行操作,直到输入等于零。为此,创建一个 while 循环:

function reverseNum(num) {
    let result = 0

    while (num > 0) {
        //...
    }

    return result
}

在 while 循环内,您要做的第一件事是获取数字的模。模运算符 (%) 返回余数,因此如果执行类似 的操作13%10,结果将为 3,因为 13/10 的余数为 3。在此算法中,您需要重复获取输入数字的最后一个值,这可以使用模来完成


function reverseNum(num) {
    let result = 0

    while (num > 0) {
        let mod = num % 10
        //...
    }

    return result
}

现在您已经有了模数,您需要修改原始数字,以便最终值不再包含在数字中。为此,您必须将数字除以 10,并对该操作执行 Math.floor() :

function reverseNum(num) {
    let result = 0

    while (num > 0) {
        let mod = num % 10
        num = Math.floor(num/10)
        //...
    }

    return result
}

最后,您需要修改“结果”变量。您想要将“mod”添加到结果中,但每次执行 while 循环时,您都需要将现有结果乘以 10,以便它变得更长,而不是简单地将数字的所有值相加:就是这样!为了测试这个解决方案是否有效,让我们使用真值表尝试数字“123”:

结果 mod num
0 3 12
0*10 +3 = 3 2 1
3*10 +2 = 32 1 0
32*10+1 = 321

由于 num 现在为 0,因此 while 循环不再执行,函数返回结果,即 321。


如果输入可以是正数或负数,您可以通过在开始时检查是否正确来轻松修改此函数,然后根据需要在末尾添加负号。

首先,实例化一个变量并将其设置为布尔值。如果输入数字为正数,则无需更改变量。如果为负数,则将该变量设置为“false”,并将输入的数字设置为其自身的绝对值:


function reverseNum(num) {
    let pos = true
    if (num < 0) {
        pos = false
        num = Math.abs(num)
    }

    let result = 0

    while (num > 0) {
        let mod = num % 10
        num = Math.floor(num/10)
        result = result * 10 + mod
    }

    //...
}

然后,在最终的 return 语句中,您需要检查 'pos' 变量是 true 还是 false。如果为 true,则只需返回结果即可。如果为 false,则说明输入的值为负数,因此返回结果乘以 -1:


function reverseNum(num) {
    let pos = true
    if (num < 0) {
        pos = false
        num = Math.abs(num)
    }

    let result = 0

    while (num > 0) {
        let mod = num % 10
        num = Math.floor(num/10)
        result = result * 10 + mod
    }

    return pos ? result : (-1 * result)
}



点赞(1) 打赏

评论列表 共有 0 条评论

暂无评论

服务号

订阅号

备注【拉群】

商务洽谈

微信联系站长

发表
评论
立即
投稿
返回
顶部