javascript - 当给定 N 个步数和 M 个最大可能步数时,返回该人可以从 0 级到 N 级(更高)的可能序列总数

标签 javascript ruby recursion

我觉得这与楼梯问题非常相似,你可以使用斐波那契递归调用,但让我失望的是 M 步骤的第二个参数,我不知道如何应用它。帮忙?

我可以像楼梯问题一样解决这个问题,这只是一个斐波那契应用程序,然后使用该斐波那契辅助函数进行转换。

我似乎根本无法让它工作

function numSteps(n, m) {
    if (n === 0) return 1

    let begin = 0
    let end = 1
    let result = 0
    for (let i = 1; i <= n; i++) {
        while (m < n) {
          result = begin + end
          begin = end
          end = result
        }
    }

    return result
};

console.log(numSteps(2, 6))

function steps(n, m) {
    let table = new Array(n + 1).fill(false);
    table[0] = true;
    let total = 0
    for (let i = 0; i < table.length; i++) {
        if (table[i] === true) {
            for (let j = 1; j <= m; j++) {
                table[j] = true
                total += 1
            }
        }
    }
    return total;
}

最佳答案

生成器可能是解决 JavaScript 中排列组合问题的最佳方法。通过在纸上或文本编辑器中逐步跟踪评估,您将学到很多东西 -

const waysToClimb = function* (n, m, seq = [])
{ if (n > 0)
    for (let i = 1; i <= m; i++)
      if (i > n)
        return
      else
        yield* waysToClimb (n - i, m, [ i, ...seq ])
  else
    yield seq
}

const result =
  Array.from (waysToClimb (10, 3))

console.log (JSON.stringify (result))
// [ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
//   , ...
//   , [ 1, 3, 3, 3 ]
// ]

关于javascript - 当给定 N 个步数和 M 个最大可能步数时,返回该人可以从 0 级到 N 级(更高)的可能序列总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57844654/

相关文章:

javascript - 向无Chrome Youtube添加控制按钮?

ruby - yield 递归

recursion - Antlr4:以下几组规则是相互左递归的

javascript - ANN : Recursive backpropagation

javascript - 在 Internet Explorer 中使用 Javascript 调用 C++

Javascript:在数据库中获取和保存文本选择范围

ruby - 在 Ruby 中生成 Azure 存储 SAS 签名

algorithm - 这个算法是O(d)吗,其中d是二叉搜索树的深度

javascript - 以编程方式登录/退出Gmail聊天,点击Gmail的span "links"

css - 如何防止重复元素显示?