gpt4 book ai didi

javascript - 如何实现一个算法来检测一个数字是否有2个连续的数字?

转载 作者:行者123 更新时间:2023-12-02 01:47:38 24 4
gpt4 key购买 nike

我想创建一个函数,如果数字是否包含连续数字,则该函数返回 true,

示例:

  • 如果输入为11,则返回true
  • 如果输入是 21 则返回 false
  • 如果输入是 323 它将返回 false,因为即使我们有 3 个重复,它们也不连续

我现在的解决方案是将数字转换为数组并逐个循环该数字,如果下一个数字等于当前数字则返回 true。但这的复杂度时间为 O(n),我想知道是否有人可以提出更好的解决方案。

谢谢

最佳答案

有一个可以说是更好的解决方案,您不需要将数字转换为字符串或数字/字符数组。其工作原理如下:

  1. 将变量 curr 初始化为 -1
  2. 运行循环 while num > 0 并执行以下操作:
  • next_curr = num % 10
  • 如果 next_curr == curr:返回 true
  • curr = next_curr
  • num = num/10(整数除法)
  • 如果循环完成,则返回 false。
  • 这是一种一次性 O(log n) 时间复杂度算法,其中 n 是输入数字。空间复杂度为O(1)

    请注意,虽然您的算法的时间复杂度也是 O(log n),但它执行了 2 次传递,并且空间复杂度也为 O(log n)

    我已经有一段时间没有写 JS 了,但是下面是上述算法在 JS 中的可能实现:

    function sameAdjacentDigits(num) {
    // to deal with negative numbers and
    // avoid potential problems when using Math.floor later
    num = Math.abs(num)
    let curr = -1
    while (num > 0) {
    const nextCurr = num % 10
    if (nextCurr == curr) return true
    curr = nextCurr
    num = Math.floor(num / 10)
    }
    return false
    }

    关于javascript - 如何实现一个算法来检测一个数字是否有2个连续的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70724626/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com