Leetcode70. 爬楼梯
题目:
假设你正在爬楼梯。需要
n
n
n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
题解:
菲波那切数列
第
i
i
i 阶可以由以下两种方法得到:
在第
(
i
−
1
)
(i-1)
(i−1) 阶后向上爬一阶。
在第
(
i
−
2
)
(i-2)
(i−2) 阶后向上爬二阶。
所以到达第
i
i
i阶的方法总数就是到第
(
i
−
1
)
(i-1)
(i−1)阶和第
(
i
−
2
)
(i-2)
(i−2) 阶的方法数之和。
令
d
p
[
i
]
dp[i]
dp[i]表示能到达第 i阶的方法总数:
d p [ i ] = d p [ i − 1 ] + d p [ i − 2 ] dp[i]=dp[i-1]+dp[i-2] dp[i]=dp[i−1]+dp[i−2]
java代码:
public static int fun70(int n) {
int first = 1;
int second = 2;
if (n == 1) return first;
if (n == 2) return second;
for (int i = 3; i <= n; i++) {
int third = first + second;
first = second;
second = third;
}
return second;
}
scala代码如下:
def climbStairs(n: Int): Int = {
var first = 1
var second = 2
if (n == 1) {
second = 1
}
if (n == 2) {
second = 2
}
if (n >= 3) {
for (i <- 3 to n) {
val three = first + second
first = second
second = three
}
}
second
}