LC 70.爬楼梯

70.爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入: n = 2
输出: 2
解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

示例 2:

输入: n = 3
输出: 3
解释: 有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

提示:

  • 1 ≤ n ≤ 45 1 \leq n \leq 45 1n45

解法一(动态规划)

思路分析:

  1. 对于多个子问题,采用动态规划算法;按照动规五部曲进行求解;
  2. 确定dp数组以及下标含义,即dp[i]表示第i个台阶,有多少种方法可以爬到
  3. 然后推导递推公式;因为一次可以爬1或2个台阶,即若要到达第i个台阶,可以由第i-1个台阶爬1个台阶到达,也可以由第i-2个台阶爬2个台阶到达,即到达第i个台阶的方法为,到达第i-1个台阶的方法和到第i-2个台阶方法的总和,即状态转移方程为:dp[i] = dp[i-1] + dp[i-2]
  4. 然后确定dp数组的初始化,可以简单得出;对于到第一阶台阶,由一种方法,对于到第二阶方法,有两种方法,即dp[1] = 1; dp[2] = 2
  5. 然后确定遍历顺序,即从i=3开始遍历到i=n;因为状态转移方程需要先得到状态dp[i-1]dp[i-2],否则无法得到正确的当前状态dp[i]
  6. 打印dp数组,确定是否符合思路与题意

实现代码如下:

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

提交结果如下:

解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:39.5 MB,击败了5.28% 的Java用户

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

解法二(状态压缩)

思路分析:

  1. 由解法一得到的状态转移方程;得知下一个状态由可表达的两个状态得出
  2. 即可以对状态数组进行压缩,使用变量ans来表示下一个需要得到的状态,使用变量ab来表示需要的两个状态

实现代码如下:

class Solution {
	public int climbStairs(int n) {
		if (n == 1 || n == 2)
			return n;
		int ans = 0;
		// 初始状态
		int a = 1, b = 2;
		for (int i = 3; i <= n; ++ i) {
			ans = a + b;	// 状态转移
			a = b;
			b = ans;
		}
		return ans;
	}
}

提交结果如下:

解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:39.4 MB,击败了47.08% 的Java用户

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

相关推荐

  1. LC 70.楼梯

    2024-04-14 20:36:04       17 阅读
  2. LeetCode 70. 楼梯

    2024-04-14 20:36:04       47 阅读
  3. 70.楼梯

    2024-04-14 20:36:04       44 阅读
  4. Leetcode 70 楼梯

    2024-04-14 20:36:04       39 阅读
  5. LeetCode70 楼梯

    2024-04-14 20:36:04       25 阅读
  6. LeetCode 70 楼梯

    2024-04-14 20:36:04       23 阅读

最近更新

  1. 深入Django(五)

    2024-04-14 20:36:04       0 阅读
  2. Django之登录权限系统

    2024-04-14 20:36:04       0 阅读
  3. LeetCode 35, 242, 994

    2024-04-14 20:36:04       0 阅读
  4. tcp 中的poll机制介绍

    2024-04-14 20:36:04       0 阅读
  5. python excel openpyxl

    2024-04-14 20:36:04       1 阅读

热门阅读

  1. 深入探索长短期记忆网络(LSTM)

    2024-04-14 20:36:04       17 阅读
  2. Linux 软路由命令行配置(参考)

    2024-04-14 20:36:04       16 阅读
  3. 【知识总结】WASI

    2024-04-14 20:36:04       14 阅读
  4. TCHouse-C

    TCHouse-C

    2024-04-14 20:36:04      15 阅读
  5. Mac 安装 HomeBrew

    2024-04-14 20:36:04       16 阅读
  6. 二分查找的边界问题是怎么产生的?

    2024-04-14 20:36:04       14 阅读
  7. P5704 字母转换【入门】

    2024-04-14 20:36:04       16 阅读
  8. 笔记——20240413

    2024-04-14 20:36:04       13 阅读
  9. flink入门代码

    2024-04-14 20:36:04       12 阅读