509. 斐波那契数
采用动态规划思想
第一步 确定dp数组和 i的含义 :
i表示第i天有几只兔子
第二步 确定递推公式 :
f(n) = f(n-1) + f(n-2)
第三部 dp数组的初始化
将dp【0】 和 dp【1】 初始化为0,1
第四步 确定遍历顺序
采用从前往后遍历就行
第五步 判断dp数组是否正确,打印dp数组看看与实际是否一样
class Solution {
public:
int fib(int n) {
if ( n <= 0 ) return 0;
int dp[n + 1];
dp[0] = 0;
dp[1] = 1;
for ( int i = 2 ; i < n + 1 ; i++ ) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
};
70. 爬楼梯
采用动态规划思想
第一步 确定dp数组和 i的含义 :
dp【i】 表示 登上第i层楼梯 有多少种方法
第二步 确定递推公式 :
f(n) = f(n-1) + f(n-2)
第三部 dp数组的初始化
将dp【1】 和 dp【2】 初始化为1,2
第四步 确定遍历顺序
采用从前往后遍历就行
第五步 判断dp数组是否正确,打印dp数组看看与实际是否一样
注意此题 dp【1】 表示登上第1层楼梯有几种方法 :一种 跨一步
dp【2】表示登上第2层楼梯有几种方法: 2种 跨两次一步 和 跨两步
dp【3】 表示登上第3层楼梯有几种方法: 3 种 先登上第一层楼梯 在登上两层楼梯
class Solution {
public:
int climbStairs(int n) {
if ( n < 3) return n;
vector < int > dp(n + 1);
dp[1] = 1;
dp[2] = 2;
for ( int i = 3 ; i < n + 1 ; i++ ) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
};