首页 > 其他分享 >代码随想录day32 || 509 斐波那契数列,70 爬楼梯,746 最小代价爬楼梯

代码随想录day32 || 509 斐波那契数列,70 爬楼梯,746 最小代价爬楼梯

时间:2024-08-17 11:49:16浏览次数:12  
标签:爬楼梯 数列 746 int 随想录 斐波 数组 dp

509 斐波那契数列


func fib(n int) int {
	// dp五部曲
	// 1 dp数组含义以及下标含义: 本题保存的是完整的斐波那契数列,i 对应数列的第i个数字
	// 2 递推公式: F(n) = F(n - 1) + F(n - 2)
	// 3 dp数组初始化: 由递推公式推到,0, 1 两位需要手动赋值,否则,oor
	// 4 遍历顺序: 求第n个数字,需要将数列遍历创建到第n个位置
	// 5 打印dp数组 
	
	var resli = []int{0, 1}
	for i := 2; i <= n; i++ {
		resli = append(resli, resli[i-1] + resli[i-2])
	}
	return resli[n]
}

70 爬楼梯

image

func climbStairs(n int) int {
	// dp五部曲
	// 确定dp数组以及下标含义: dp存储当前已经爬的阶梯数
	// 递推公式: f(n) = f(n - 1) + f(n - 2) // 即本次爬两步需要的方法 + 本次爬一步需要的方法总数
	// dp数组初始化: f(0) = 0, f(1) = 1
	// 遍历顺序: 从前往后
	// 打印dp

	var res = []int{0, 1, 2}
	for i := 3; i<=n; i++ {
		res = append(res, res[i-1] + res[i-2])
	}
	return res[n]
}

746 最小代价爬楼梯

image

func minCostClimbingStairs(cost []int) int {
	// dp数组以及下标含义: dp保存了爬到i楼累计最小体力消耗
	// 递推公式: mc(k) = min(mc[k-1] + cost[k-1], mc[k-2]+cost[k-2]), 从k-1消耗体力爬一层 或者 从k-2消耗体力爬两层
	// dp初始化: 题目给出了0,1两层都可以作为起点,所以0-1需要最小体力和都是0
	// 遍历顺序: 从前往后
	// 打印dp

	var mincost = []int{0, 0}
	for i := 2; i <= len(cost); i++ {
		mincost = append(mincost, min(cost[i-1] + mincost[i-1], cost[i-2] + mincost[i-2]))
	}
	fmt.Println(mincost)
	return mincost[len(cost)]
}

func min (x, y int )int {
	if x < y {
		return x
	}
	return y
}

标签:爬楼梯,数列,746,int,随想录,斐波,数组,dp
From: https://www.cnblogs.com/zhougongjin55/p/18364186

相关文章

  • 代码随想录算法训练营第十七天(一)| 654.最大二叉树 617.合并二叉树
    654.最大二叉树题目:给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。......
  • 代码随想录算法训练营第十七天(二)| 700.二叉搜索树中的搜索 98.验证二叉搜索树
    700.二叉搜索树中的搜索题目:给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在BST中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null 。示例1:输入:root=[4,2,7,1,3],val=2输出:[2,1,3]示例2:输入:roo......
  • 随想录day3:203.移除链表元素|707.设计链表 |206.反转链表
    203.移除链表元素方法一:直接遍历,永远记得处理head,删除链表必须有前驱。/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval){this.val=val;}*ListNode......
  • 【代码随想录】二、链表:2、设计链表
    部分图文参考于:代码随想录-707.设计链表。这道题目设计链表的五个接口:●获取链表第index个节点的数值●在链表的最前面插入一个节点●在链表的最后面插入一个节点●在链表第index个节点前面插入一个节点●删除链表的第index个节点可以说这五个接口,已经覆盖了链表的......
  • 【代码随想录】二、链表:1、移除链表元素
    部分图文参考于:代码随想录-203.移除链表元素。C++编程中记得要手动释放结点内存。链表操作中,可以使用原链表来直接进行删除操作,也可以设置一个虚拟头结点再进行删除操作。1.题目链接203.移除链表元素2.思路以链表1424来举例,移除元素4。如果使用C,C++编程语言的话,......
  • 【代码随想录】二、链表:理论基础
    原文链接:代码随想录-链表理论基础。1.什么是链表?链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。2.链表的类型2.1.......
  • 代码随想录 day31|| 56 合并区间,738 单调递增数字,968 监控二叉树
    56合并区间funcmerge(intervals[][]int)[][]int{ //思路先排序,然后按照后一个左区间和前一个右区间进行对比判断是否重叠,重叠扩充右区间 sort.Slice(intervals,func(i,jint)bool{ ifintervals[i][0]==intervals[j][0]{ returnintervals[i][1]<intervals[......
  • 「代码随想录算法训练营」第三十九天 | 动态规划 part12
    115.不同的子序列题目链接:https://leetcode.cn/problems/distinct-subsequences/文章讲解:https://programmercarl.com/0115.不同的子序列.html题目难度:困难视频讲解:https://www.bilibili.com/video/BV1fG4y1m75Q/题目状态:看题解思路:动态规划数组初始化创建一个二维动......
  • 代码随想录Day16
    513.找树左下角的值给定一个二叉树的根节点root,请找出该二叉树的最底层最左边节点的值。假设二叉树中至少有一个节点。示例1:输入:root=[2,1,3]输出:1示例2:输入:[1,2,3,4,null,5,6,null,null,7]输出:7提示:二叉树的节点个数的范围是[1,104]-231<=......
  • 【代码随想录】一、数组:6.前缀和
    二刷的时候发现更新了一些新的题目,尝试写了写后,发现我完全不会ACM输入输出模式。这两天在补前几天没背的八股,写得不够满意(几乎是完全誊代码了),先放着,后面再补充补充吧。1.题目:44.开发商购买土地#include<iostream>#include<vector>#include<climits>usingnamespacestd......