您的位置:首页 > 编程语言 > Java开发

leetcode:Climbing Stairs 【Java】

2016-03-13 21:00 337 查看
一、问题描述

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?
二、问题分析

此问题实际为斐波那契数列问题。注意不能使用递归算法,会报超时错误,需要采用缓存中间结果的策略。

三、算法代码

代码一:

public class Solution {
    HashMap<Integer, Integer> result = new HashMap<Integer, Integer>();
    public int climbStairs(int n) {
        if(n <= 2){
            return n;
        }
        if(result.containsKey(n)){
            return result.get(n);
        }
        result.put(n, climbStairs(n - 1) + climbStairs(n - 2));
        return result.get(n);
    }
}


代码二:

public class Solution {
    public int climbStairs(int n) {
        if(n <= 2){
            return n;
        }
        int [] result = new int
;
        result[0] = 1;
        result[1] = 2;
        for(int i = 2; i < n; i++){
            result[i] = result[i - 1] + result[i - 2];
        }
        return result[n - 1];
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: