17.爬楼梯-LeetCode-Java-待完善

    技术2022-07-10  155

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1+ 12. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1+ 1+ 12. 1+ 23. 2+ 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); } } /** * 方法二:记忆化递归 * 优化:记录下已经算过的递归结果 避免重复计算 */ class Solution { public int climbStairs(int n) { int memo[] = new int[n + 1]; return climbStairsMemo(n, memo); } public int climbStairsMemo(int n, int memo[]) { if (memo[n] > 0) return memo[n]; if (n == 1) memo[1] = 1; else if (n == 2) memo[2] = 2; else memo[n] = climbStairsMemo(n - 1,memo) + climbStairsMemo(n - 2,memo); return memo[n]; } } /** * 方法三:f(x)=f(x−1)+f(x−2) * 斐波拉契数列 */ class Solution { public int climbStairs(int n) { int first = 0, second = 1, third = 1; for (int i = 1; i <= n; i++) { third = first + second; first = second; second = third; } return third; } } 待完善: 方法四:矩阵快速幂 方法五:斐波那契数列通项公式
    Processed: 0.111, SQL: 9