1、解题思路
- 斐波那契数列关系:青蛙跳到第 n 级台阶的跳法数等于跳到第 n-1 级和第 n-2 级台阶的跳法数之和。这是因为青蛙可以从第 n-1 级跳 1 级上来,或者从第 n-2 级跳 2 级上来。初始条件:f(1) = 1(跳 1 级),f(2) = 2(跳 1+1 或直接跳 2 级)。
- 迭代法(动态规划):使用循环和变量存储中间结果,避免重复计算。时间复杂度:O(n),空间复杂度:O(1)。
- 矩阵快速幂法:用矩阵快速幂将时间复杂度优化到 O(log n)。适用于对时间复杂度要求更高的场景。
2、代码实现
C++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param number int整型
* @return int整型
*/
int jumpFloor(int number) {
// write code here
if (number == 1) {
return 1;
}
if (number == 2) {
return 2;
}
int a = 1, b = 2, c;
for (int i = 3; i <= number; ++i) {
c = a + b;
a = b;
b = c;
}
return b;
}
};
Java
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param number int整型
* @return int整型
*/
public int jumpFloor (int number) {
// write code here
if (number == 1) return 1;
if (number == 2) return 2;
int a = 1, b = 2, c;
for (int i = 3; i <= number; ++i) {
c = a + b;
a = b;
b = c;
}
return b;
}
}
Python
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param number int整型
# @return int整型
#
class Solution:
def jumpFloor(self , number: int) -> int:
# write code here
if number == 1:
return 1
if number == 2:
return 2
a, b = 1, 2
for _ in range(3, number + 1):
c = a + b
a, b = b, c
return b
3、复杂度分析
- 初始条件:f(1) = 1,f(2) = 2。
- 迭代过程:使用三个变量 a、b、c 来存储中间结果。a 和 b 分别代表 f(n-2) 和 f(n-1)。每次迭代更新 a 和 b 的值,最终 b 即为 f(n)。
- 效率:时间复杂度:O(n),只需一次循环。空间复杂度:O(1),只使用了常数个变量。
- 适用性:适用于 n 较小的情况(n ≤ 40)。如果 n 很大(如 n ≤ 10^18),可以使用矩阵快速幂法进一步优化时间复杂度到 O(log n)。