使用kotlin解决这个问题:70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 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
时间: 2024-02-04 15:03:58 浏览: 84
可以使用递归或动态规划来解决这个问题。下面是使用动态规划的 Kotlin 代码:
```kotlin
fun climbStairs(n: Int): Int {
if (n <= 2) {
return n
}
val dp = IntArray(n + 1)
dp[1] = 1
dp[2] = 2
for (i in 3..n) {
dp[i] = dp[i - 1] + dp[i - 2]
}
return dp[n]
}
```
在上面的代码中,我们首先检查输入的`n`是否小于等于2,如果是,则直接返回`n`。否则,我们创建一个长度为`n+1`的整数数组`dp`,并将`dp[1]`和`dp[2]`的值初始化为1和2。然后,我们使用循环计算`dp[i]`的值,其中`dp[i]`表示爬到第`i`个台阶的不同方法数。具体来说,`dp[i]`的值等于`dp[i-1]`和`dp[i-2]`的值之和,因为我们可以从第`i-1`个台阶或第`i-2`个台阶到达第`i`个台阶。最后,我们返回`dp[n]`的值,即爬到第`n`个台阶的不同方法数。
请注意,由于`dp`数组中只使用了`dp[i-1]`和`dp[i-2]`的值,因此我们可以使用两个变量来存储这些值,而不是使用一个数组来存储它们。这样可以进一步优化空间复杂度。
阅读全文