主要目的为自我学习记录
日期: 2020年6月13日
题号: 70
自评难度: 官方评为简单难度,我认为有点难,得记忆下来
题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
题目来源于leetcode,地址
题解:
这次可没有暴力法了。
一开始毫无头绪,认为可以先除去2,按照余数以及排列组合的方式去算出可能的解的个数,后来看了大家提到斐波那契,就觉得自己的想法一开始就是错误了。
正确解法(不唯一):
class Solution {
public int climbStairs(int n) {
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}
解释: 代码来自于题解
- 首先,将个数为0和1的走法个数写好,因为这两种情况走法都只有1;
- 其次,进行数组的for循环,从第三个元素起,每一个元素都等于前两个元素之和。因为每当走到n-1以及n-2步的时候,只需要走一步或者是走两步就可以达到n,因此走到n级台阶的方法等于前两个元素之合。