[英]When given N num of steps and M max possible steps return the total number possible sequences where the person can go (higher) from level 0 to level N
我覺得這與樓梯問題非常相似,在樓梯問題中您可以使用fibonacci遞歸調用,但是讓我失望的是M步驟的第二個參數,我不確定如何應用它。 救命?
我可以解決這個問題,類似於樓梯問題,后者只是一個fibonacci應用程序,然后使用該fib輔助函數進行過渡。
我似乎根本無法工作
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 ] // ]
這是Ruby中的遞歸解決方案。
def steps(max_steps, steps_remaining)
(1..max_steps).sum do |n|
case n <=> steps_remaining
when -1
steps(max_steps, steps_remaining-n)
when 0
1
else
0
end
end
end
steps(2, 4)
#=> 5
steps(3, 10)
#=> 274
steps(5, 15)
#=> 13624
require 'time'
t = Time.now
puts steps(8, 25)
16_190_208
(Time.now-t).round
#=> 22 seconds
在第一個示例中,5個可能的序列如下:
[[1,1,1,1], [1,1,2], [1,2,1], [2,1,1], [2,2]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.