网站建设捌金手指专业1做网站项目前期工作包括哪些
web/
2025/10/2 20:43:39/
文章来源:
网站建设捌金手指专业1,做网站项目前期工作包括哪些,wordpress dux1.4自适应,企业加好友解决方案文章目录 一. 斐波那契数列模型1. 第 N 个泰波那契数2. 三步问题3. 使用最小花费爬楼梯解法一#xff1a;从左往右填表解法二#xff1a;从右往左填表 一. 斐波那契数列模型
解题步骤#xff1a;
确定状态表示#xff08;最重要#xff09;#xff1a;明确dp表里的值所… 文章目录 一. 斐波那契数列模型1. 第 N 个泰波那契数2. 三步问题3. 使用最小花费爬楼梯解法一从左往右填表解法二从右往左填表 一. 斐波那契数列模型
解题步骤
确定状态表示最重要明确dp表里的值所表示的含义推导状态转移方程最难dp[i] 等于什么初始化保证填表的时候不越界填dp表通过前面已经计算过的状态来推导当前状态的值返回结果
1. 第 N 个泰波那契数 题目解析 我们对题目给的公式进行转化 观察公式可以看到如果要求第 i 个泰波那切数的话我们只需知道前 i-1、i-2、i-3 的值即可。
算法原理
状态表示dp[i] 代表第 i 个泰波那切数状态转移方程dp[i] dp[i-1] dp[i-2] dp[i-3]初始化dp[0] 1、dp[1] 1、dp[2] 1填表根据状态转移方程和初始化的值使用滑动窗口的方式一直计算最终得到第 i 个泰波那切数。返回值第 n 个泰波那切数
编写代码
class Solution {
public:int tribonacci(int n) {// 1、建表// 2、初始化// 3、填表// 4、返回值vectorint dp(n1);dp[0] 0, dp[1] dp[2] 1;for(int i 3; i n; i){dp[i] dp[i-1] dp[i-2] dp[i-3];}return dp[n];}
};/*
- 时间复杂度O(n)
- 空间复杂度O(n)
*/2. 三步问题 题目解析小孩最多一次跳三步假设要跳到第n级台阶那最后跳到第n级台阶时的那一步一定是下面三种情况之一
所以想求跳到第n级台阶有几种方法的话我们只需知道跳到第 n-1、n-2 和 n-3 台阶时各自有几种方法然后把它们相加起来即可。
PS计算时需要注意取模
算法原理
状态表示dp[i] 表示 到达i位置时一共有多少种方法。状态转移方程dp[i] dp[i-1] dp[i-2] dp[i-3]初始化dp[1] 1 dp[2] 2 dp[3] 4填表顺序从左往右返回值 dp[n]
代码实现
class Solution
{
public:int waysToStep(int n){// 1、处理特殊情况if (n 1) return 1;if (n 2) return 2;if (n 3) return 4;// 2、创建dp表vectorint dp(n 1);// 3、初始化dp[1] 1;dp[2] 2;dp[3] 4;// 4、填表for (size_t i 4; i n; i)dp[i] ((dp[i - 1] dp[i - 2]) % 1000000007 dp[i - 3]) % 1000000007;// 5、返回值return dp[n];}
};/*
- 时间复杂度O(n)
- 空间复杂度O(n)
*/3. 使用最小花费爬楼梯 题目解析
解法一从左往右填表
状态表示dp[i] 表示到达i位置时的最小花费状态转移方程 初始化保证填表的时候不越界dp[0]dp[1]0填表顺序从左往右返回值因为是从0号台阶开始所以最后一个台阶的下标为 n-1。最后返回 dp[n]
代码实现
class Solution
{
public:int minCostClimbingStairs(vectorint cost){// 创建dp表size_t n cost.size();vectorint dp(n 1);// 填表for (size_t i 2; i n; i)dp[i] min(dp[i - 1] cost[i - 1], dp[i - 2] cost[i - 2]);// 返回值return dp[n];}
};/*
- 时间复杂度O(n)
- 空间复杂度O(n)
*/解法二从右往左填表 状态表示dp[i] 表示从i位置出发到达楼顶此时的最小花费 状态转移方程 初始化dp[n-1] cost[n-1]、dp[n-2] cost[n-2] 填表顺序从右往左 返回值min(dp[0] dp[1])
代码实现
class Solution
{
public:int minCostClimbingStairs(vectorint cost){int n cost.size();vectorint dp(n);dp[n - 1] cost[n - 1];dp[n - 2] cost[n - 2];for (int i n - 3; i 0; --i)dp[i] cost[i] min(dp[i 1], dp[i 2]);return min(dp[0], dp[1]);}
};/*
- 时间复杂度O(n)
- 空间复杂度O(n)
*/
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85808.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!