summaryrefslogtreecommitdiff
path: root/c/0070/main.c
blob: 143eeb32e6abee87a7b47aac343d6bf0bafdb626 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdlib.h>

int climbStairsImpl(int n, int* cache) {
    if (n == 0) return 1;
    if (n < 0) return 0;
    if (cache[n] > 0) return cache[n];
    int ret = climbStairsImpl(n-1, cache) + climbStairsImpl(n-2, cache);
    cache[n] = ret;
    return ret;
}

int climbStairs(int n) {
    int *cache = malloc(sizeof(int) * (n+1));
    return climbStairsImpl(n, cache);
}