问题:
70。爬楼梯
类型:Easy
喜欢19.8k
被656不喜欢。
问这个问题的公司
公司:没有时间问
亚马逊3
雅虎2
Adobe 11
Google 5
苹果5
彭博3
微软3
Uber 2
Nagarro 2
Expedia 12
Oracle 4
高盛3
Facebook 2
英特尔2
签证2
optum 2
Swiggy 2
您正在攀登楼梯。到达顶部需要N步骤。
每次您都可以攀登1或2步。您可以通过几种不同的方式爬到顶部?
示例1:
输入:n = 2
输出:2
说明:
`有两种爬到顶部的方法。
- 1步 + 1步
- 2个步骤
示例2:
输入:n = 3
输出:3
说明:
`有三种爬升到顶部的方法。
- 1步 + 1步 + 1步
- 1步 + 2步
- 2步 + 1步骤
约束:
1 <= n <= 45
直觉:
问题是要找到一次爬上楼梯的方法,当您一次可以进行1步或2步。要解决它,您可以使用动态编程。
方法:
创建一个数组来存储到达每个步骤的方法数量。
初始化数组的前两个元素(代表第一步和第二个步骤)。
使用循环计算到达每个后续步骤的方法数量。
返回到达最后一步的方法数量。
复杂:
时间复杂性:o(n)
空间复杂性:o(n)
代码
class Solution {
public int climbStairs(int n) {
int[] arr = new int[n+1];
if(n == 1){
return 1;
}
else{
arr[1] = 1;
arr[2] = 2;
for(int i = 3 ; i <=n ; i++){
arr[i] = arr[i-1] + arr[i-2];
}
}
return arr[n];
}
}
愉快的编码,
湿婆