爬楼梯 · Climbing Stairs

[抄题]:

假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

[思维问题]:

  1. 不知道一步、两步怎么加。还是用iteration迭代。此题公式可被称为斐波那契数列
  2. 不知道和坐标型有什么关系:列j = 1即可

[一句话思路]:

生兔子问题:把大数赋给小数

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

  1. 把大数赋给小数
  2. state是声明有变量,initialize是给变量赋值

[复杂度]:Time complexity: O(n^2) Space complexity: O(n^2)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

746. Min Cost Climbing Stairs最值爬楼梯

 [代码风格] :

public class Solution {
    /**
     * @param n: An integer
     * @return: An integer
     */
    public int climbStairs(int n) {
        //corner case
        if (n <= 0) {
            return 0;
        }
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 2;
        }
        //state=//initialization
        int one_step = 2;
        int two_step = 1;
        int all_step = 0;
        
        
        //function
        for (int i = 2; i < n; i++) {
            all_step = one_step + two_step;
            two_step = one_step;
            one_step = all_step;
        }
        //result
        return all_step;
    }
}
View Code
原文地址:https://www.cnblogs.com/immiao0319/p/8432002.html