实战总结:
vector常用方法:
创建一个长为n的vector,并将所有元素初始化为某一定值x
vector<int> vec(len, x)
代码执行过程中将所有元素更新为某一值x
fill(vec.begin(), vec.end(), x)
// 更多实战方法欢迎参考文章:
【vector】常用实战方法:增删改查(C++入门必看)_vector 增删查改-CSDN博客
题面
DP&记忆化通用思路总结
- //DP思想: 寻找与原问题 同类的 更小的子问题
- //确定更小的同类问题: 可以用递归
- //发掘大小问题的通用逻辑: 递归函数写什么
- //递归函数基本构成:
- //确定这个递归函数返回什么结果
- //递归结束条件
- //递归函数主体
- //递归函数基本构成:
- //什么时候用记忆化:
- //存在大量重复计算时 <=> 递归函数参数相同,那么结果必然一样
AC代码见下,思路已在注释中清晰体现:
class Solution {
public:int climbStairs(int n) {vector<int>rem(n+1, 0);//rem[i]用来记忆还有i级台阶时有多少种走法auto dfs = [&](auto& dfs, int i) -> int{//dfs返回:当还有i级台阶要走时,一共有几种走法。if(i < 0) return 0;//递归返回条件else if(i == 0) return 1;else if(rem[i] != 0) return rem[i];int res = 0;res += dfs(dfs, i-1);//最后一步走一级台阶res += dfs(dfs, i-2);//还是走两步?//两种走法相互独立,所以采用加法原理rem[i] = res;//记忆化return res; };return dfs(dfs, n);}
};
进阶DP练习推荐:
【leetcode】T3144 (附DP&记忆化通用思路)-CSDN博客