来啦:584. 数列推进计算任务

41 阅读1分钟
  1. 用于求解数列 a 的第n项值:
function solution(n) {
    // PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE
    // write code here
    // 因为前面还有一一个 0,所以 +1
    // 用数组记录每一项的值
    /* const arr = new Array(n + 1).fill(0)
    arr[1] = 1
    arr[2] = 1
    if (n >= 3) {
        for (let i = 3; i <= n; i++) {
            arr[i] = arr[i - 1] + arr[i - 2] + arr[i - 3]
        }

    }
    return arr[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--
    }
    // console.log(res)
    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();
  1. 用数组记录每一项求出的值,最后返回第n项,因此空间复杂度为 O(n), 使用 for 循环进行遍历,因此时间复杂度为 O(n)
  2. 用 prev1 、prev2 、 prev3 进行记录求解下一项所需要的参数 ,空间复杂度为 O(1),时间复杂度为 O(n)