leetcode 70. Climbing Stairs爬梯子(DP问题)

来源:互联网 发布:virtualbox nat网络 编辑:程序博客网 时间:2024/06/02 11:07

问题描述:

  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.


这里写图片描述

思路:

  要上到第n个台阶,需要上到第n-2个台阶,最后加2,或者到第n-1个台阶,最后加1,所以可以考虑采用递归的算法。

递归思想代码:

class Solution {    public int climbStairs(int n) {        if(n == 1) return 1;        if(n == 2) return 2;        return climbStairs(n-1) + climbStairs(n-2);    }}

  但是这种递归太慢了,提交结果显示Time Limit Exceeded,考虑采用动态规划

class Solution {    public int climbStairs(int n) {        int f1 = 1;        int f2 = 2;        int f3 = 0;        if(n == 1) return 1;        if(n == 2) return 2;        for(int i = 3; i <= n; i++){            f3 = f1 + f2;            f1 = f2;            f2 = f3;        }        return f3;    }}