mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
Merge pull request #1484 from wzqwtt/dp01
添加(0509.斐波那契数、0070.爬楼梯、0746.使用最小花费爬楼梯) Scala版本
This commit is contained in:
@ -401,6 +401,38 @@ int climbStairs(int n){
|
||||
}
|
||||
```
|
||||
|
||||
### Scala
|
||||
|
||||
```scala
|
||||
object Solution {
|
||||
def climbStairs(n: Int): Int = {
|
||||
if (n <= 2) return n
|
||||
var dp = new Array[Int](n + 1)
|
||||
dp(1) = 1
|
||||
dp(2) = 2
|
||||
for (i <- 3 to n) {
|
||||
dp(i) = dp(i - 1) + dp(i - 2)
|
||||
}
|
||||
dp(n)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
优化空间复杂度:
|
||||
```scala
|
||||
object Solution {
|
||||
def climbStairs(n: Int): Int = {
|
||||
if (n <= 2) return n
|
||||
var (a, b) = (1, 2)
|
||||
for (i <- 3 to n) {
|
||||
var tmp = a + b
|
||||
a = b
|
||||
b = tmp
|
||||
}
|
||||
b // 最终返回b
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
-----------------------
|
||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||
|
@ -263,7 +263,7 @@ var fib = function(n) {
|
||||
};
|
||||
```
|
||||
|
||||
TypeScript
|
||||
### TypeScript
|
||||
|
||||
```typescript
|
||||
function fib(n: number): number {
|
||||
@ -342,5 +342,33 @@ pub fn fib(n: i32) -> i32 {
|
||||
return fib(n - 1) + fib(n - 2);
|
||||
}
|
||||
```
|
||||
|
||||
### Scala
|
||||
|
||||
动态规划:
|
||||
```scala
|
||||
object Solution {
|
||||
def fib(n: Int): Int = {
|
||||
if (n <= 1) return n
|
||||
var dp = new Array[Int](n + 1)
|
||||
dp(1) = 1
|
||||
for (i <- 2 to n) {
|
||||
dp(i) = dp(i - 1) + dp(i - 2)
|
||||
}
|
||||
dp(n)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
递归:
|
||||
```scala
|
||||
object Solution {
|
||||
def fib(n: Int): Int = {
|
||||
if (n <= 1) return n
|
||||
fib(n - 1) + fib(n - 2)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
-----------------------
|
||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||
|
@ -323,5 +323,35 @@ int minCostClimbingStairs(int* cost, int costSize){
|
||||
return dp[i-1] < dp[i-2] ? dp[i-1] : dp[i-2];
|
||||
}
|
||||
```
|
||||
|
||||
### Scala
|
||||
|
||||
```scala
|
||||
object Solution {
|
||||
def minCostClimbingStairs(cost: Array[Int]): Int = {
|
||||
var dp = new Array[Int](cost.length)
|
||||
dp(0) = cost(0)
|
||||
dp(1) = cost(1)
|
||||
for (i <- 2 until cost.length) {
|
||||
dp(i) = math.min(dp(i - 1), dp(i - 2)) + cost(i)
|
||||
}
|
||||
math.min(dp(cost.length - 1), dp(cost.length - 2))
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
第二种思路: dp[i] 表示爬到第i-1层所需的最小花费,状态转移方程为: dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
|
||||
```scala
|
||||
object Solution {
|
||||
def minCostClimbingStairs(cost: Array[Int]): Int = {
|
||||
var dp = new Array[Int](cost.length + 1)
|
||||
for (i <- 2 until cost.length + 1) {
|
||||
dp(i) = math.min(dp(i - 1) + cost(i - 1), dp(i - 2) + cost(i - 2))
|
||||
}
|
||||
dp(cost.length)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
-----------------------
|
||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||
|
Reference in New Issue
Block a user