zoukankan      html  css  js  c++  java
  • code第一部分数组:第十七题 爬楼梯问题

    code第一部分数组:第十七题 爬楼梯问题

    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?

    分析
    设 f(n) 表示爬 n 阶楼梯的不同方法数,为了爬到第 n 阶楼梯,有两个选择:
    • 从第 n − 1 阶前进 1 步;
    • 从第 n − 1 阶前进 2 步;
    因此,有 f(n) = f(n − 1) + f(n − 2)。
    这是一个斐波那契数列。

    两种方法,一是迭代,二是递归

    #include <iostream>
    
    using namespace std;
    
    int climbStairs(int n)
    {
        int prev = 0;
        int cur = 1;
        for(int i = 1; i <= n ; ++i)
        {
            int tmp = cur;
            cur = prev + cur;
            prev = tmp;
        }
        return cur;
    }
    
    int climbStairs2(int n)
    {
        if (n<=0)
        {
            return 0;
        }
        if (n==1)
        {
            return 1;
        }
        if (n==2)
        {
            return 2;
        }
        if (n>2)
        {
            int ans=climbStairs2(n-1)+climbStairs2(n-2);
            return ans;
        }
    }
    
    
    
    int main()
    {
        int stairs=4;
        int ans=climbStairs(stairs);
        cout<<"ans1 is "<<ans<<endl;
    
        int ans2=climbStairs2(stairs);
        cout<<"ans2 is "<<ans2<<endl;
        return 0;
    }
  • 相关阅读:
    XSS
    XSS
    检查空引用
    LockInt
    Unity Shaderlab: Object Outlines 转
    git 恢复单个文件的历史版本
    烽火HG220G-U E00L2.03M2000光猫改桥接教程
    mark mem
    转 class和struct最本质的区别
    unity shader base pass and additional pass
  • 原文地址:https://www.cnblogs.com/tao-alex/p/6443048.html
Copyright © 2011-2022 走看看