首页 > 其他分享 >代码随想录day34 || 62 不同路径,63 不同路径||,343整数拆分,96 不同搜索二叉树

代码随想录day34 || 62 不同路径,63 不同路径||,343整数拆分,96 不同搜索二叉树

时间:2024-08-19 11:17:18浏览次数:4  
标签:遍历 int 不同 路径 随想录 拆分 dp

不同路径

image

func uniquePaths(m int, n int) int {
	// dp五部曲
	// dp数组以及下标的含义  dp[i][j]代表从0,0 走到i,j的不同路径条数
	// 递推公式			dp[i][j] = dp[i-1][j] + dp[i][j-1]
	// dp数组的初始化     dp[i][0] == dp[0][j] = 1
	// 遍历顺序	外层按照行,内层按照列遍历
	// 打印dp
	var dp = make([][]int, m)
	for i:=0; i<m; i++{
		dp[i] = make([]int, n)
		for j:=0; j<n; j++{
			if i==0 || j==0 {
				dp[i][j] = 1
			}else {
				dp[i][j] = dp[i-1][j] + dp[i][j-1]
			}
		}
	}
	//fmt.Println(dp)
	return dp[m-1][n-1]
}

// 63 不同路径||

func uniquePathsWithObstacles(obstacleGrid [][]int) int {
	// dp五部曲
	// 确定dp数组以及下标含义 dp[i][j] 表示1,1 到i, j不同路径数
	// 递推公式,if not 障碍 {dp[i][j] = dp[i-1][j] + dp[i][j-1]} else {dp[i][j] = 0}
	// 初始化dp dp[0][j] == dp[i][0] == 0, dp[1][1] = 1
	// 遍历顺序,先横向后纵向
	// 打印dp
	if obstacleGrid[0][0] == 1 {
		return 0
	}
	var dp = make([][]int, len(obstacleGrid)+1)
	for i, _ := range dp {
		dp[i] = make([]int, len(obstacleGrid[0])+1)
	}
	//dp[1][1] = 1 // 因为如果初始位置是障碍物,已经被最上面的return情况排除了
	//fmt.Println(dp)

	for i:=0; i<len(obstacleGrid); i++ {
		for j:=0; j<len(obstacleGrid[0]); j++{
			if obstacleGrid[i][j] == 1{
				// 障碍物
				dp[i+1][j+1] = 0
			} else if i==0 && j==0{
				dp[i+1][j+1] = 1
			} else {
				dp[i+1][j+1] = dp[i][j+1] + dp[i+1][j]
			}
		}
	}
	//fmt.Println(dp)
	return dp[len(obstacleGrid)][len(obstacleGrid[0])]
}

343 整数拆分

func integerBreak(n int) int {
	// dp以及下标含义  dp[i] 代表拆分i能得到的最大积
	// 递推公式 dp[i] = max(j*(i-j), j*dp[i-j], dp[i]) //j*(i-j) 代表不拆分i-j得到积, j*dp[i-j]代表拆分i-j得到最大积
	// 初始化 dp[0] = 0 dp[1] = 0  dp[2] = (1x1) =1
	// 遍历顺序 3-->n
	// dayin
	var dp = []int{0,0,1}
	if n < 3 {
		return dp[n]
	}else {
		dp = append(dp, make([]int, (n+1)-3)...)
	}
	for i := 3; i <= n; i++{
		for j:=1; j<=i/2; j++{
			m := max(j*(i-j), j*dp[i-j])
			if m>dp[i] {
				dp[i] = m
			}
		}
	}
	//fmt.Println(dp)
	return dp[n]
}

96 不同搜索二叉树

func numTrees(n int) int {
	// dp数组以及下标含义 dp[i] 表示 i个节点的二叉搜索树数量
	// 递推公式 dp[i] = Σ(0, i)(dp[j-1] * dp[i-j])  dp[j-1]代表左子树的数量 dp[i-j]代表右子树的数量,相乘就是j时的总组合,
	// 初始化 dp[0] = 1, dp[1] = 1, dp[2] = 2
	// 遍历顺序,i从0遍历到n, j每次从1遍历到i
	// 打印

	var dp = []int{1,1,2}
	if n <= 2 {
		return dp[n]
	}else {
		dp = append(dp, make([]int, n+1-3)...)
	}
	for i:=3; i<=n; i++{
		for j:=1; j<=i; j++{
			dp[i] += dp[j-1] * dp[i-j]
		}
	}
	fmt.Println(dp)
	return dp[n]
}

标签:遍历,int,不同,路径,随想录,拆分,dp
From: https://www.cnblogs.com/zhougongjin55/p/18366935

相关文章

  • 在K8S中,⼀个pod的不同container能够分开被调动到不同的节点上吗?
    在Kubernetes(K8S)中,一个Pod是一组一起部署和管理的容器的集合。Pod内的容器总是被调度到同一个节点上运行,这是因为Pod设计的基本理念是其内的所有容器需要紧密耦合并且共享相同的网络命名空间和存储卷。具体来说,Pod内的容器有以下特点:共享IP地址:Pod内的所有容器共享......
  • 传统园区转型升级智慧园区的路径探讨
    随着科技的快速发展和经济结构的转型升级,传统园区面临着转型的迫切需求。智慧园区以其高效、绿色、智能的特点,成为了未来园区发展的方向。本文将从几个关键方面探讨传统园区如何实现向智慧园区的转型升级。一、智慧园区的概念与特点智慧园区是基于物联网、大数据、云计算等新......
  • 扫描切除-实体轮廓:方程式驱动曲线路径vs螺旋线路径
    最近,在使用solidworks2018的过程中,接触到扫描切除-实体轮廓命令,如图1-2所示。此命令可以使用一个实体来切除另一个实体,用来切除的实体可以按一定的轨迹运动。测试过程中发现,这个命令频繁出错,切除失败,体验实在是太差了。下面对比了在该命令下使用方程式驱动曲线和螺旋线命令构建......
  • 代码随想录Day18
    530.二叉搜索树的最小绝对差给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。示例1:输入:root=[4,2,6,1,3]输出:1示例2:输入:root=[1,0,48,null,null,12,49]输出:1提示:树中节点的数目范围是......
  • 代码随想录算法训练营第11天|二叉树part01
    理论基础需要了解二叉树的种类,存储方式,遍历方式以及二叉树的定义二叉树纯理论方面还是比较简单,以前都学过,没什么可讲的。满二叉树就是满了,完全二叉树就是层满了(而且是左边)。平衡二叉搜索树就是左右深度绝对值差1。一般采用链式存储方式,顺序存储结构如果父节点的数组......
  • 代码随想录算法训练营第10天|栈与队列part02
    150.逆波兰表达式求值本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题classSolution{public:intevalRPN(vector<string>&tokens){stack<longlong>st;for(conststring&token:tokens){if(token=="+......
  • 代码随想录Day17
    654.最大二叉树给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的子数组后缀上构建右子树。返回nums构建的最大二叉树......
  • 【代码随想录训练营第42期 Day32打卡 - 从零开始动态规划 - LeetCode 509. 斐波那契数
    目录一、做题心得二、动规五步走三、题目与题解题目一:509.斐波那契数题目链接题解1:记忆性递归 题解2:动态规划题目二:70.爬楼梯 题目链接题解:动态规划题目三:746.使用最小花费爬楼梯题目链接题解:动态规划三、小结一、做题心得今天开始动态规划章节的第一......
  • 浏览器解析html文件src静态资源路径问题
    相对路径src资源引号内部不以/分割符开头,浏览器从当html文件前路径拼接url:场景a<imgsrc="static/1.jpeg"width="258"height="39"/>当前请求地址xxxx:80/html/1.html浏览器解析图片地址为xxxx:80/html/static/1.jpeg场景b<imgsrc="../static/1.jpeg"width="......
  • Qt/C++地图标注点的添加删除移动旋转/指定不同图标和动图/拿到单击信号
    一、前言说明标注点在地图开发中是最常见的应用场景之一,比如在地图上需要显示设备的位置,基本上都是添加标注点,指定图片和尺寸已经经纬度坐标位置。这个功能在每种地图内核中都提供的,这个并没有任何难点,在这个功能点上最大难题或者说是设计细节就是,标注点该如何对齐,比如水滴形状的......