经过上一节的概念篇学习,你一定对递推有一个大概得了解,今天就做做下面的一些练习题吧,总体上不难,都是最基础的题目。
509. 斐波那契数
int fib(int n){
int f[31] = {0, 1};
for(int i = 2; i <= n; ++i) {
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
1137. 第 N 个泰波那契数
int tribonacci(int n){
int f[38] = {0, 1, 1};
for(int i = 3; i <= n; ++i) {
f[i] = f[i - 1] + f[i - 2] + f[i - 3];
}
return f[n];
}
LCR 127. 跳跃训练
注意整型溢出
int trainWays(int num) {
long long f[101] = {1, 1, 2};
long long mod = 1e9 + 7;
for(int i = 3; i <= num; ++i) {
f[i] = f[i - 1] + f[i - 2];
f[i] %= mod;
}
return f[num];
}
面试题 08.01. 三步问题
int waysToStep(int n){
long long f[1000000] = {1, 1, 2};
long long mod = 1e9 + 7;
for(int i = 3; i <= n; ++i) {
f[i] = f[i - 1] + f[i - 2] + f[i - 3];
f[i] %= mod;
}
return f[n];
}
LCR 126. 斐波那契数
int fib(int n){
long long f[101] = {0, 1};
long long mod = 1e9+7;
for(int i = 2; i <= n; ++i) {
f[i] = f[i - 1] + f[i - 2];
f[i] %= mod;
}
return f[n];
}
70. 爬楼梯
int climbStairs(int n) {
int f[46] = {1, 1};
for(int i = 2; i <= n; ++i) {
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}