爬楼梯算法java实现

问题描述

假设你正在爬楼梯,需要n阶才能到达楼顶。每次你可以爬1或2个台阶。有多少种不同的方法可以爬到楼顶?

方法一:动态规划(推荐)

java 复制代码
public class ClimbingStairs {
    
    /**
     * 动态规划方法 - 时间复杂度O(n),空间复杂度O(n)
     */
    public static int climbStairsDP(int n) {
        if (n <= 2) return n;
        
        int[] dp = new int[n + 1];
        dp[1] = 1; // 1阶有1种方法
        dp[2] = 2; // 2阶有2种方法
        
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        
        return dp[n];
    }
    
    /**
     * 动态规划 - 空间优化版,时间复杂度O(n),空间复杂度O(1)
     */
    public static int climbStairsDPOptimized(int n) {
        if (n <= 2) return n;
        
        int prev1 = 1; // 前1阶的方法数
        int prev2 = 2; // 前2阶的方法数
        int current = 0;
        
        for (int i = 3; i <= n; i++) {
            current = prev1 + prev2;
            prev1 = prev2;
            prev2 = current;
        }
        
        return current;
    }
}

方法二:递归(不推荐用于大数)

java 复制代码
/**
     * 递归方法 - 时间复杂度O(2^n),空间复杂度O(n)
     * 注意:这种方法在n较大时效率很低
     */
    public static int climbStairsRecursive(int n) {
        if (n <= 2) return n;
        return climbStairsRecursive(n - 1) + climbStairsRecursive(n - 2);
    }
相关推荐
徐小夕@趣谈前端5 分钟前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
问好眼9 分钟前
【信息学奥赛一本通】1275:【例9.19】乘积最大
c++·算法·动态规划·信息学奥赛
Daydream.V27 分钟前
逻辑回归实例问题解决(LogisticRegression)
算法·机器学习·逻辑回归
代码无bug抓狂人27 分钟前
C语言之表达式括号匹配
c语言·开发语言·算法
不穿格子的程序员35 分钟前
从零开始写算法——普通数组篇:缺失的第一个正数
算法·leetcode·哈希算法
Nebula_g42 分钟前
线程进阶: 无人机自动防空平台开发教程(更新)
java·开发语言·数据结构·学习·算法·无人机
rit84324991 小时前
基于MATLAB的环境障碍模型构建与蚁群算法路径规划实现
开发语言·算法·matlab
hoiii1871 小时前
MATLAB SGM(半全局匹配)算法实现
前端·算法·matlab
独自破碎E1 小时前
大整数哈希
算法·哈希算法
纤纡.1 小时前
逻辑回归实战进阶:交叉验证与采样技术破解数据痛点(二)
算法·机器学习·逻辑回归