隐式图
我要上岸!!!
这个作者很懒,什么都没留下…
展开
-
LeetCode 752 Open the Lock (LintCode 796)
思路隐式图bfs,level-order bfs。定义每一个状态为图中的一个节点,例如“0000”。然后每一个节点与其能通过+1/-1转动某一位得到的状态节点之间有一条无向边。然后进行层序bfs遍历,搜索target,并记录层数dist。在实现的时候,可以定义每一层节点都加入过队列之后(筛选过),dist++;定义先尝试计算next,再决定是否将next加入队列(是否为死锁),一旦决定next...原创 2019-04-21 04:54:09 · 176 阅读 · 0 评论 -
LintCode 10 String Permutation II
思路与Permutation的思路类似,使用与subsets II相同的去重思路。DFS搜索。时间复杂度O(n!)空间复杂度O(n)代码public class Solution { /** * @param str: A string * @return: all permutations */ public List<String&...原创 2019-10-08 10:53:29 · 206 阅读 · 0 评论 -
LintCode 17 Subsets
思路排列组合搜索,使用dfs解决。注意该题目与leetcode 78不同的一点是:每个结果中的数字必须是升序的,于是需要先对数组排序。复杂度时间复杂度O(nlogn)空间复杂度O(logn)代码public class Solution { /** * @param nums: A set of numbers * @return: A list of li...原创 2019-09-15 07:32:39 · 109 阅读 · 0 评论 -
LeetCode 127 Word Ladder
思路隐式图BFS,每一个状态看作图中的每个节点。从起点开始BFS的同时记录level层数,方便返回结果。复杂度时间复杂度为O(n∗26l)O(n*26^l)O(n∗26l)空间复杂度为O(n)O(n)O(n)其中,n为字典大小,l为每个单词的长度代码public class Solution { /* * @param start: a string * ...原创 2019-07-19 15:21:42 · 205 阅读 · 0 评论 -
LC 126 Word Ladder II
思路1:IDA*DFS的迭代加深搜索(IDA*)+剪枝。每次搜索都加深一层,直到搜索到符合的结果。首先需要构建一个Map来存储每个字典中的词对应的能变化成的单词,这里最好将start和end都加入到字典中,可以保证dfs的正常开始和退出;并且不会影响结果,因为如果提前搜到start则一定会绕路,如果提前搜到end那么也符合了题目要求无矛盾。具体解释见代码。剪枝:每一个单词都有一个变化次数下...原创 2019-05-28 14:45:32 · 129 阅读 · 0 评论 -
LintCode 634 Word Squares (LeetCode 425)
思路dfs+剪枝。这里是枚举型dfs:模拟多层嵌套的for循环。因为单词长度最多为5,所以最多5层循环,但是这里还是使用dfs来实现,目的一个是为了美观,另外也是为了如果遇到很多层循环要嵌套的作准备。dfs的过程就是在一个一个尝试所有的可能性,如果两个单词能依次放在一起,那么二者就有一条边相连。这里说一下剪枝的过程:(1)在放下一个单词的时候,直接从之前放过的单词里计算一个前缀prefix出来,...原创 2019-05-22 16:05:12 · 294 阅读 · 0 评论 -
LintCode 653 / LeetCode 282 Expression Add Operators
思路枚举型dfs。暴力枚举搜索,通过枚举所有的可能数字组合形式来看是否符合要求。每次枚举当前数字和其符号,对于+或-直接在结果val上进行加减操作即可,但是对于就需要使用一个lastFactor变量存储上一个连乘的结果,当前value=value-lastFactor+curlastFactor(原理是首先将上一个+/-的数也就是连乘的数lastFactor还原回去,然后再将其与cur相乘加到v...原创 2019-05-26 14:30:11 · 137 阅读 · 0 评论 -
LeetCode 254 Factor Combinations (LintCode 652 Factorization)
思路枚举类dfs+剪枝。dfs部分思路很简单,从小到大枚举即可保证题目中的非降序的要求。但是要注意每次dfs要对target进行重新计算,除以添加到path的数。剪枝:提前判断i和target/i的关系(即下一层dfs的后两个变量的大小关系),因为在进入for循环之后就可以立即计算出来这两个参数,在这里剪枝之后可以避免path的add和remove操作,还是有一定作用的。但是这样会误伤dfs(...原创 2019-05-24 14:05:45 · 628 阅读 · 0 评论 -
LintCode 794 Sliding Puzzle II
思路【注意bfs中,在将一个元素加入queue中后就要标记为visited】隐式图bfs,level-order bfs,记录步数。定义每一个节点为每一个状态(9个位置的数字),边定义为两个状态之间通过移动0一次可以得到,则二者之间有一条边。主要过程就是bfs进行层序搜索。其中一个技巧是将二维数组转化为字符串来保存,这样方便队列操作以及查重等操作。实现了两个函数:(1)matrixToSt...原创 2019-05-10 13:35:21 · 455 阅读 · 1 评论 -
LeetCode 51 N-Queens
思路dfs搜索,其实是排列型搜索permutation。利用一个List来存每一列上存了什么数字,索引就是行数,可以保证每一行只有一个数字。搜索部分就是permutation模板实现,只是模板中的visit判断放入判断是否相互攻击的函数中了。判断是否不会相互攻击:(1)每行只有一个:通过list索引自动解决(2)每列只有一个:搜索所有已经存进list中的index是否与将加入的index重...原创 2019-10-08 14:00:09 · 126 阅读 · 0 评论