您的位置:首页 > 大数据 > 人工智能

LeetCode70 Climbing Stairs 解题报告

2018-01-12 16:30 417 查看
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?

Note: Given n will be a positive integer.

example:

Input: 2
Output:  2
Explanation:  There are two ways to climb to the top.

1. 1 step + 1 step
2. 2 steps


题意是给一个步数n, 表示需要n个步数才能爬到顶,每次只能走一步或者两步,问一共有多少种走法。

本题的求解还是比较简单的,一看到题目,就可以非常简单的想到递归的走法,即走到n步的时候,其实是n-1和n-2步决定的,所以可以得到推导公式C
=C[n-1]+C[n-2] (n>=2)。

需要注意的是C[0]=1,C[1]=1。

递归代码如下:

void climbStairs_helper(int n, int &re)
{
if(n==0)
{
re++;
return ;
}
if(n<0)
{
return ;
}

climbStairs_helper(n-1, re);
climbStairs_helper(n-2, re);

}

int climbStairs(int n)
{
int re=0;
if(n==0||n==1)
{
re=1;
return re;
}

climbStairs_helper(n, re);

return re;
}


这种解法比较简单,但是超时,多了很多重复的计算,其实根据推导公式可以非常简单的写出一个循环,直接得到n的走法

int climbStairs2(int n)
{
if(n==0||n==1)
{
return 1;
}
vector<int> re{n+1,0};
re[0]=1;
re[1]=1;

for(int i=2;i<n+1;i++)
{
re[i]=re[i-1]+re[i-2];
}

return re
;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: