[leetcode-]Climbing Stairs(C语言)

来源:互联网 发布:域名备案到期查询 编辑:程序博客网 时间:2024/06/07 22:16

问题描述:
You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

这道题如果单纯使用DFS的话会超时,比较好的方法是存一个数组,将第n步到顶的方法数存在数组[n]位置处。

代码如下:0ms

int dfs(int remain,int* store){    if(store[remain]!=-1)        return store[remain];    int tmp1 = dfs(remain-1,store);    int tmp2 = dfs(remain-2,store);    store[remain] = tmp1+tmp2;    return tmp1+tmp2;}int climbStairs(int n) {    int* store = (int *)malloc(sizeof(int)*(n+1));    int i;    for(i = 0;i<=n;i++)        store[i] = -1;    store[0] = 1;        store[1] = 1;    int method = dfs(n,store);    free(store);    return method;}

上面这种方法实在是太蠢了!换成如下:

int climbStairs(int n) {    int* store = (int *)malloc(sizeof(int)*(n+1));    int i;    store[0] = 1;        store[1] = 1;    for(i = 2;i<n;i++){        store[i] = store[i-1]+store[i-2];    }    int tmp = store[n-1]+store[n-2];    free(store);    return tmp;}
0 0
原创粉丝点击