当前位置: 首页 > article >正文

【leetcode详解】爬楼梯:DP入门典例(附DP通用思路 同类进阶练习)

实战总结:

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博客

~希望对你有启发!~


http://www.kler.cn/a/295025.html

相关文章:

  • 2024年该了解的常用渲染工具
  • Spring Boot中集成MyBatis操作数据库详细教程
  • java获取当月所有时间
  • Windows磁盘管理右键无法删除卷,右键只有帮助选项按钮
  • java的体系结构
  • 二次封装 el-pagination 组件存在的问题
  • 使用Protocol Buffers传输数据
  • 在vscode中用virtual env的方法
  • git如何灵活切换本地账号对应远程github的两个账号
  • 代码随想录:279. 完全平方数
  • 如何在Selenium中使用Chrome进行网络限速
  • ComfyUI+Krea免费利用AI制作网站萌宠IP,五步搞定制作AI萌宠
  • React 响应事件
  • 【Godot4.3】多边形的斜线填充效果基础实现
  • 在Ubuntu 20.04上安装Nginx的方法
  • 懒人笔记-opencv4.8.0篇
  • 【详解 Java 注解】
  • 一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)
  • 分数阶微积分MATLAB计算
  • 将你的github仓库设置为web代理
  • Java零基础-如何在分布式系统中进行日志管理?
  • 【鸿蒙】HarmonyOS NEXT星河入门到实战1-开发环境准备
  • Vulnhub:Dr4g0n b4ll 1
  • Qt/C++开源项目 TCP客户端调试助手(源码分享+发布链接下载)
  • <class ‘pyspark.sql.dataframe.DataFrame‘>
  • Eureka原理与实践:构建高可用微服务架构的基石