递推思路
思路来源于B站李永乐老师的视频
思路是这样的,对于上到的第 n 个台阶,都可以分解为两个来源:
- 上到第 n-1 个台阶
- 上到第 n-2 个台阶
正常递推
这里存在一个问题:上到第 n-2 个台阶后再上到第 n-1 个台阶再上到第 n 个台阶是否要单独考虑,答案是不用,这种情况已经被考虑在 上到第 n-1 个台阶里了,所以可以看出这是一个非常类似于斐波那契数列的问题,因此可以书写答案如下:
object Solution {
def climbStairs(n: Int): Int = {
if(n<3) n
else{
val arr = new Array[Int](n+1)
arr(1)=1
arr(2)=2
for(i <- 3 to n){
arr(i) = arr(i-1)+arr(i-2)
}
arr(n)
}
}
}
原地递推
那么在完成了以上的答案之后,我们考虑是否可以进行一些优化,上述答案的时间复杂度是O(N),因为答案只需要最后两项即可求出,所以只需留下最后两项即可,所以优化代码如下:
import scala.math.{
sqrt, pow}
object Solution {
def climbStairs(n: Int): Int = {
if</