基本算法类型
文章平均质量分 57
Lehends_on_win
gogogo
展开
-
回溯算法-组合排列问题
回溯 回溯算法能解决如下问题 组合问题:N个数里面按一定规则找出k个数的集合 排列问题:N个数按一定规则全排列,有几种排列方式 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集 棋盘问题:N皇后,解数独等等 回溯算法的模板 void dfs(){ if(终止条件){ 存放结果; return; } for(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)){原创 2021-08-29 19:11:24 · 279 阅读 · 0 评论 -
dfs与回溯
深度优先搜索 简单来说就是遍历所有的可能。DFS通过递归,先从一个方向搜到底,再回溯到上一个节点,向另一个方向搜索。 剪枝 在搜索中遇到匹配失败的情况时,立刻返回,称之为可行性剪枝 接下来我就用一道例题来说明dfs 剑指offer12: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个原创 2021-07-18 21:47:52 · 451 阅读 · 0 评论 -
对于dp的一点理解
动态规划 在这周,我稍微做了几题dp题目,并根据自己的做题总结出了一些做题规律 DP解题基本步骤 1,首先要确定需要求的目标值 比方说,一个m*n的二维数组,我们需要求从出发点到右下方结束点的最小步数,那么结束点dp[m-1][n-1]就是我们的目标值 2,要找出目标值的构成,我个人认为有些类似于递归的思路,从头一步步递归到目标点 沿用上面的例子,目标点的构成就是dp[m-2][n-1]+1或者是dp[m-1][n-2]+1,因为目标点是由前一个点进行向下移动或者向右移动得到的。 3,最后一步我们就原创 2021-06-25 15:16:04 · 268 阅读 · 0 评论