回溯
Betternw
这个作者很懒,什么都没留下…
展开
-
【双指针 相遇问题】 offer57和为s的两个数字/和为目标值的多个数字
题目输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]思路相遇类型的双指针代码 public int[] twoSum(int[] nums, int target) {原创 2020-07-12 18:06:18 · 125 阅读 · 0 评论 -
数字字符串转化成IP地址
题目描述现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。例如:给出的字符串为"25525522135",返回[“255.255.22.135”, “255.255.221.35”]. (顺序没有关系)分析回溯法插入’.’,每次可以插入到1个,2个或者3个字符后面,插入3次之后对得到的字符串进行验证代码import java.util.*;public class Solution { /** * * @param s st原创 2021-08-01 16:35:09 · 624 阅读 · 0 评论 -
112 路径总和
题目描述给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true分析若当前节点就是叶子节点,那么直接判断 sum 是否等于 val 即可(因为路径和已经确定,就是当前节点的值,我们只需原创 2021-07-19 21:20:26 · 73 阅读 · 0 评论 -
【回溯】 40 组合总和2
思路重复:有两种重复情况【11111】:通过递归传递的begin参数,每次向下传递都+1.从而避免反复调用自己。【1 2(第一个2) 5】和【1 2 (第二个2)5】:i > begin && candidates[i] == candidates[i - 1] begin代表的是第几层,i代表的是当前层的第几个数字。【1 2(第一个2) 5】中的2是第begin层的第i=begin个数字。【1 2 (第二个2)5】是第begin层的第i+1>begin个数字。当出现i原创 2020-06-17 21:10:19 · 99 阅读 · 0 评论 -
【回溯】 90 子集2
题目给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]思路和78类似。但是对于有重复元素的数组:要先进行排序。要进行判重。begin代表的是第几层,i代表的是当前层的第几个数字。【1 2(第一个2) 5】中的2是第begin层的第i=begin个数字。【1 2 (第二个2)5】是第begin层的第i+1>begin个数原创 2020-06-17 23:02:22 · 125 阅读 · 0 评论 -
【dfs回溯】 113 路径总和
题目给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。给定如下二叉树,以及目标和 sum = 22,5/ 4 8/ / 11 13 4/ \ / 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]思路dfs回溯。必须是结尾为叶子节点时才加入列表。剪枝是:当左孩子为空就遍历右,右为空就遍历左。因为如果不剪枝,当遍历到叶子节点的时候,会遍历一次左孩子遍历一次右孩子,就会有两个重复解。代码publi原创 2020-07-02 09:43:10 · 118 阅读 · 0 评论 -
【回溯??】 47全排序2
题目给出一个可包含重复数字的序列,返回所有不重复的全排列。输入: [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]思路重复的数字被回退后,在下一次的循环中又会遇到。if(!used[i]) 如果还用这个条件判断,对于存在重复数字的数组比如【1 1 2】,那么就不会形成【112】这个全排列。在需要剪枝的 ① 处,nums[i - 1] 由于在回溯的过程中刚刚被撤销了选择,因此接下来搜索的过程中还会被选择到,因此一定会发生重复,所以在这里剪枝。而 ② 处,上一个原创 2020-06-17 22:43:51 · 101 阅读 · 0 评论 -
【回溯 dfs 剪枝】 offer38 字符串的排列
题目输入一个字符串,打印出该字符串中字符的所有排列。可以以任意顺序返回这个字符串数组,但里面不能有重复元素。输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]思路47题同思路代码public String[] permutation(String s) { int length = s.length(); if(length==0) return new String[0]; List<原创 2020-07-08 10:45:18 · 93 阅读 · 0 评论 -
【回溯 dfs for循环进入dfs,marked数组标记,direction数组路径】 79 单词搜索
题目给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回 false思路原创 2020-06-23 17:09:31 · 148 阅读 · 0 评论 -
【回溯 dfs for循环 不剪枝直接添加所有结果 for循环原模板】 78 子集
题目给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。输入: nums = [1,2,3]输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]分析回溯。判重:for循环中遍历从当前数开始向后遍历不再遍历之前的。递归自带终原创 2020-06-17 19:35:16 · 197 阅读 · 0 评论 -
【回溯 做选择-dfs-撤销选择 使用boolean数组和depth进行剪枝】 46 全排列
题目给定一个没有重复数字的序列,返回其所有可能的全排列。输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路回溯算法。全排列与树的形态一致。递归的终止条件是数字选够,因此选用一个变量表示递归到第几层。定义一个数组记录哪些数字选用过。图解全排列+回溯算法原理代码public List<List<Integer>> permute(int[] nums) { int原创 2020-06-16 21:51:31 · 310 阅读 · 0 评论 -
【回溯 先排序 做选择-dfs-撤销选择 使用剩余和的值进行剪枝】 39 组合总和
题目给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。输入: candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]...原创 2020-06-17 18:26:12 · 231 阅读 · 0 评论 -
【dfs回溯 if条件判断后回溯】 22括号生成
题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]思路回溯算法当左右括号都有大于0个剩余可以使用,才产生组合放入左括号时,只看是否还有左括号需要使用产生右括号时,需要保证右边剩余大于左边的才可以减1进行组合在左边和右边剩余0的时候进行结算代码public List<String> generatePar原创 2020-06-16 23:18:48 · 137 阅读 · 0 评论 -
【dfs回溯 条件判断后回溯 for循环中】 17 电话号码的字母组合
题目给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].思路理解流程,自主无法写出代码。比如要求234的字母组合,用index记录遍历到哪个数字位置。获取到2的对应字母,然后第一个字母与3的字母进行组合。当index遍历到最后时,输出目前累加的字符串结果。动画演示代码Strin原创 2020-06-12 11:47:53 · 168 阅读 · 0 评论