- 用于求解数列 a 的第n项值:
function solution(n) {
if (n === 0) return 0
if (n === 1 || n === 2) return 1
let prev1 = 0
let prev2 = 1
let prev3 = 1
let res = 0
while (n >= 3) {
res = prev1 + prev2 + prev3
prev1 = prev2
prev2 = prev3
prev3 = res
n--
}
return res
}
function main() {
console.log(JSON.stringify(solution(5)) === JSON.stringify(7));
console.log(JSON.stringify(solution(12)) === JSON.stringify(504));
console.log(JSON.stringify(solution(18)) === JSON.stringify(19513));
}
main();
- 用数组记录每一项求出的值,最后返回第n项,因此空间复杂度为 O(n), 使用 for 循环进行遍历,因此时间复杂度为 O(n)
- 用 prev1 、prev2 、 prev3 进行记录求解下一项所需要的参数 ,空间复杂度为 O(1),时间复杂度为 O(n)