![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode-Medium个人刷题笔记
文章平均质量分 92
LeetCode-Medium个人刷题笔记
软工2班吴同学
这个作者很懒,什么都没留下…
展开
-
回溯总结Part1
回溯&DFS回溯可以看做DFS的一个应用。DFS一条路走到黑,而回溯装了南墙就回头。回溯动态规划共同点 用于求解多阶段决策问题。多阶段决策问题即:求解一个问题分为很多步骤(阶段); 每一个步骤(阶段)可以有多种选择。不同点 动态规划只需要求我们评估最优解是多少,最优解对应的具体解是什么并不要求。因此很适合应用于评估一个方案的效果; 回溯算法可以搜索得到所有的方案(当然包括最优解),但是本质上它是一种遍历算法,时间复杂度很高。设计状态变量 使用深度优先遍历..原创 2021-03-06 18:34:25 · 174 阅读 · 2 评论 -
【LeetCode-Medium-Java】96. 不同的二叉搜索树
题目给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2...原创 2020-09-25 15:22:46 · 62 阅读 · 0 评论 -
【LeetCode-Medium-Java】47. 全排列 II
题目:给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]解题思路:回溯如何理解去重?https://leetcode-cn.com/problems/permutations-ii/solution/47-quan-pai-lie-iiche-di-li-jie-pai-lie-zhong-de-q/本题中去重的方式是如果nums[i-1]和nums[i]相等并且n.原创 2020-09-21 19:38:16 · 107 阅读 · 0 评论 -
【LeetCode-Medium-Java】39. 组合总和
题目:给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。示例:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]解题思路:回溯算法注意:for循环中的dfs,传参...原创 2020-09-20 15:22:45 · 150 阅读 · 0 评论 -
【LeetCode-Medium-Java】17. 电话号码的字母组合
题目:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].解题思路:回溯算法1、每个字母代表的字母存放在map中2、dfs记录到digits的第几个数字了cur,记录路径path,和最后的结果res。3、注意:for循环循环的是分支的东西,...原创 2020-09-20 10:15:28 · 118 阅读 · 0 评论 -
【LeetCode-Medium-Java】78. 子集
题目:给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]解题思路:回溯算法注意:1、不用考虑去重2、for循环中递归的时候,传入的是i+1,不是cur+1!!!代码:public static List<...原创 2020-09-20 09:47:17 · 123 阅读 · 0 评论 -
【LeetCode-Medium-Java】46. 全排列
题目:给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路:回溯1、dfs需要的参数:nums数组,每条不同的路线path,nums数组的长度len,最后总的结果res,nums[i]是否被用过了used数组。2、dfs函数中,for循环遍历nums[i] 若已经访问过,continue;3、...原创 2020-09-18 17:23:04 · 93 阅读 · 0 评论 -
【LeetCode-Medium-Java】322. 零钱兑换
题目:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。示例:输入: coins = [1, 2, 5]amount = 11输出: 3 解释: 11 = 5 + 5 + 1解题思路:动态规划* 1、dp[i] 表示凑够 i 元 需要的最少硬币数 假设硬币面值有1,2,5元* 2、dp[i]一定是由dp[i-1]+1元/+2元/+5元得来的* 3、所以..原创 2020-09-17 17:55:07 · 135 阅读 · 0 评论 -
【LeetCode-Medium-Java】120. 三角形最小路径和
题目:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3] ]自顶向下的最小路径和为11(即,2+3+5+1= 11)。解题思路:动态规划1、最开始想的是dp[i] 表示到达第i行的最小路径和。后来一想,不对劲呀,最后一排的具...原创 2020-09-17 16:04:27 · 92 阅读 · 0 评论 -
【LeetCode-Medium-Java】64. 最小路径和
题目:给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。解题思路:动态规划* 1、dp[i][j] 表示到达 i,j位置最小的总和。* 2、dp[i][j] = dp[i-1][j]+grid[i][j] 和 dp[i][j-1]+gr...原创 2020-09-16 15:45:38 · 82 阅读 · 0 评论