LeetCode70 Climbing Stairs 解题报告

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[n]=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[n];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值