LeetCode - 70. Climbing Stairs

链接

543. Diameter of Binary Tree

题意

爬楼梯。
爬一个需要n步才能到顶端的楼梯。现要求每次只能走1步或2步,问有多少种方法到达顶端。

思路

假设step[n]代表n级台阶的答案。那么试想到达顶端前一步只有两种状态:只剩一级台阶或只剩两级台阶,那么到达这两种状态有多少种方法呢,显然是step[n-1]和step[n-2],也即step[n] = step[n-1]和step[n-2]。因此利用循环依次求出数组值即可。

代码

public class Solution {
    public int climbStairs(int n) {
        if (n == 0) return 0;
        if (n == 1) return 1;
        if (n == 2) return 2;
        int[] step = new int[n + 1];
        step[0] = 0;
        step[1] = 1;
        step[2] = 2;
        for (int i = 3; i < step.length; i++) {
            step[i] = step[i - 1] + step[i - 2];
        }
        return step[n];
        
    }
}

变式

跳法不同:一次可以跳[1,n]阶。具体思路可见:https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387

posted @ 2017-07-13 10:49  zyoung  阅读(154)  评论(0编辑  收藏  举报