原题链接在此 https://leetcode.cn/problems/reverse-integer/ 一个常见的算法问题是反转正整数:将 12345 变成 54321。乍一看,这个问题似乎很简单——将整数转为字符串,然后转为数组,反转数组,然后将其转为字符串,最后再次化为整数。虽然该解决方案可能会得到“54321”,但这并不是解决问题的最佳方法。 如果算法的输入值是整数,并且预期输出是整数,那么问题的最佳解决方案不涉及将整数转换为另一种数据类型。相反,要解决简单的“反转整数”问题,您应该使用模和简单的数学。 首先要做的是编写一个函数,我将其称为 现在,您想要对数字执行操作,直到输入等于零。为此,创建一个 while 循环: 在 while 循环内,您要做的第一件事是获取数字的模。模运算符 (%) 返回余数,因此如果执行类似 的操作 现在您已经有了模数,您需要修改原始数字,以便最终值不再包含在数字中。为此,您必须将数字除以 10,并对该操作执行 Math.floor() : 最后,您需要修改“结果”变量。您想要将“mod”添加到结果中,但每次执行 while 循环时,您都需要将现有结果乘以 10,以便它变得更长,而不是简单地将数字的所有值相加:就是这样!为了测试这个解决方案是否有效,让我们使用真值表尝试数字“123”: 由于 num 现在为 0,因此 while 循环不再执行,函数返回结果,即 321。 如果输入可以是正数或负数,您可以通过在开始时检查是否正确来轻松修改此函数,然后根据需要在末尾添加负号。 首先,实例化一个变量并将其设置为布尔值。如果输入数字为正数,则无需更改变量。如果为负数,则将该变量设置为“false”,并将输入的数字设置为其自身的绝对值: 然后,在最终的 return 语句中,您需要检查 'pos' 变量是 true 还是 false。如果为 true,则只需返回结果即可。如果为 false,则说明输入的值为负数,因此返回结果乘以 -1:reverseNum
,它接受一个数字。然后,初始化一个新变量,调用result
并将其设置为零。结果就是你最终将返回的结果:function reverseNum(num) {
let result = 0
//...
return result
}function reverseNum(num) {
let result = 0
while (num > 0) {
//...
}
return result
}13%10
,结果将为 3,因为 13/10 的余数为 3。在此算法中,您需要重复获取输入数字的最后一个值,这可以使用模来完成
function reverseNum(num) {
let result = 0
while (num > 0) {
let mod = num % 10
//...
}
return result
}function reverseNum(num) {
let result = 0
while (num > 0) {
let mod = num % 10
num = Math.floor(num/10)
//...
}
return result
}
结果
mod
num
0
3
12
0*10 +3 = 3
2
1
3*10 +2 = 32
1
0
32*10+1 = 321
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
}
//...
}
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)
}
文章为作者独立观点,不代表DLZ123立场。如有侵权,请联系我们。( 版权为作者所有,如需转载,请联系作者 )
网站运营至今,离不开小伙伴们的支持。 为了给小伙伴们提供一个互相交流的平台和资源的对接,特地开通了独立站交流群。
群里有不少运营大神,不时会分享一些运营技巧,更有一些资源收藏爱好者不时分享一些优质的学习资料。
现在可以扫码进群,备注【加群】。 ( 群完全免费,不广告不卖课!)
发表评论 取消回复