zoukankan      html  css  js  c++  java
  • 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
    注意:给定 n 是一个正整数。

    示例 1:
    输入: 2
    输出: 2
    解释: 有两种方法可以爬到楼顶。
    1. 1 阶 + 1 阶
    2. 2 阶

    示例 2:
    输入: 3
    输出: 3
    解释: 有三种方法可以爬到楼顶。
    1. 1 阶 + 1 阶 + 1 阶
    2. 1 阶 + 2 阶
    3. 2 阶 + 1 阶

    这个题本质就是解裴波拉切数

    定义F(n)表示到达第n个台阶的方法,则F(n) = F(n - 1) +F(n - 2) ;

    思路清晰后代码如下:

    递归方法如下:

    public static int climbStairs(int n) {
             if(n<=0)
                return 0;
            if(n == 1)
                return 1;
            if(n == 2)
                return 2;
            return  climbStairs(n-1)+climbStairs(n-2);    
    }

    非递归方法如下:

    public static int climbStairs(int n) {
             if(n<=0)
                return 0;
            if(n == 1)
                return 1;
            if(n == 2)
                return 2;
            //初始化
            int x = 1;
            int y = 2;
            int result = 0;
            while(n>=3) {
                result = x + y;
                x = y;
                y = result;
                n--;
            }
            return result;
        }

    这类题用递归有大量的重复计算,建议用非递归方法解此类题

  • 相关阅读:
    第三周动手动脑
    判断回文串
    补码&&反码&&原码小知识
    第二周课后学习作业&&动手动脑课后作业
    Topcoder Tian Ji‘s Horse Racing
    Dining kuangbin
    网络流算法
    kuangbin Doing Homework
    kuangbin Prime Path
    ZOJ4033 CONTINUE...?
  • 原文地址:https://www.cnblogs.com/du001011/p/10457556.html
Copyright © 2011-2022 走看看