随笔分类 -  LeetCode每日刷题

上一页 1 2 3 4 5 6 ··· 8 下一页
以medium为主
摘要:☆☆☆思路:本题可以看成约束版的“爬楼梯问题”,即约束版的 f(n) = f(n-1) + f(n-2) 问题。 注意点1:由于 i 取 1 时,dp[len-2]取不到,所以要有n+1个。len-2决定了 dp[i] 应定义为 字符个数为i的方法总数。 注意点2:对于dp[0]的初值,举例如"12 阅读全文
posted @ 2021-01-01 21:26 不学无墅_NKer 阅读(108) 评论(0) 推荐(0)
摘要:思路: 画出递归树可以看出,存在重叠子问题,且具有最优子结构,因此可以使用 动态规划 解决。 (1)使用递归进行编码, 提交到力扣会超时 class Solution { public int integerBreak(int n) { return breakInteger(n); } // 将n 阅读全文
posted @ 2021-01-01 11:38 不学无墅_NKer 阅读(113) 评论(0) 推荐(0)
摘要:思路: 参考左神P187 1. 状态的定义:dp[i][j]表示从左上角即(0,0)位置走到(i,j)位置的最小路径和。 2. 特殊情况: 对于矩阵第一行的所有位置,从(0,0)走到(0,j)只能一直往右走。同理, 对于矩阵第一列的所有位置,从(0,0)走到(i,0)只能一直往下走。 3. 除了第一 阅读全文
posted @ 2020-12-31 15:20 不学无墅_NKer 阅读(131) 评论(0) 推荐(0)
摘要:【举一反三】:最大路径和——数字三角形问题(动态规划) ☆☆☆思路:动态规划 ——> 空间优化(使用一维数组而不是二维数组,这样只使用了O(n)的额外空间。) class Solution { public int minimumTotal(List<List<Integer>> triangle) 阅读全文
posted @ 2020-12-31 10:26 不学无墅_NKer 阅读(115) 评论(0) 推荐(0)
摘要:☆☆☆☆☆思路:与N皇后问题类似。 class Solution { public void solveSudoku(char[][] board) { if (board == null || board.length == 0) return; dfs(board); } private boo 阅读全文
posted @ 2020-12-30 19:57 不学无墅_NKer 阅读(112) 评论(0) 推荐(0)
摘要:☆☆☆☆思路:如果在(i,j)处放置了一个皇后,那么 1. 整个第 i 行的位置都不能放置; 2. 整个第 j 列的位置都不能放置。 3. 如果位置(a,b)满足|a-i|==|b-j|,说明(a,b)和(i,j)处在同一条斜线上,也不能放置。 代码1(参考左神书,耗时2ms): class Sol 阅读全文
posted @ 2020-12-30 15:56 不学无墅_NKer 阅读(83) 评论(0) 推荐(0)
摘要:N皇后问题也可以转化为树形问题,每一层代表格子的一行,每一个节点都有N种选择。 思路1:以52题的解法为基础,当递归到底时,根据record[]数组的状态信息,还原出皇后的位置。 判断斜线的方法(参考左神):如果(a,b)满足|a-i|==|b-j|,说明(a,b)和(i,j)处在同一条斜线上。 思 阅读全文
posted @ 2020-12-30 15:44 不学无墅_NKer 阅读(126) 评论(0) 推荐(0)
摘要:☆☆☆思路:类似于130题。从边界开始扩展。 建立两个矩阵Atlantic和Pacific, 当Atlantic[i][j]和Pacific[i][j]同时为true时表示该位置可以同时到达Atlantic和Pacific 遍历时的技巧为: 只需要从四个边界开始遍历即可(类似Flood Fill的思 阅读全文
posted @ 2020-12-29 17:18 不学无墅_NKer 阅读(130) 评论(0) 推荐(0)
摘要:思路1:DFS 如果把X看作海水,O看作陆地,被海水包围的就是岛屿。没有被海水包围的陆地,与边界有连通,就不是岛屿。判断是否是岛屿比较困难,问题转化为先找出非岛屿(凡是与边界有联系的O),即对边界上的 O 特殊处理。根据题意,四个边的 0 以及与其相邻的 0 都不能被替换为X,因此从边界向里面扩展。 阅读全文
posted @ 2020-12-29 15:56 不学无墅_NKer 阅读(98) 评论(0) 推荐(0)
摘要:思路:本题是经典的Flood Fill(泛洪)问题,即染色问题 或 颜色填充问题。 这类问题需要把与(i,j)相连接的岛屿都标记上,而不是在其中找到某个序列或者某个值,所以只标记true,不需要进行状态重置。 代码1(修改输入数据): class Solution { public int numI 阅读全文
posted @ 2020-12-29 12:24 不学无墅_NKer 阅读(106) 评论(0) 推荐(0)
摘要:☆☆☆☆思路:二维平面上的回溯法。 先将问题转化为树形问题,每一个点都有四个方向可以走,若规定顺时针即为“上->右->下->左”。 注意:关于标记某个格子是否被访问过有两个思路,一是设置visited[][]布尔数组,二是直接修改输入数据,回溯时再改回来。 在具体面试中,需要询问面试官是否可以修改输 阅读全文
posted @ 2020-12-29 11:13 不学无墅_NKer 阅读(100) 评论(0) 推荐(0)
摘要:class Solution { private List<String> res = new LinkedList<>(); public List<String> readBinaryWatch(int num) { dfs(num, 0, 0, 1, 1, new LinkedList<Int 阅读全文
posted @ 2020-12-28 22:10 不学无墅_NKer 阅读(71) 评论(0) 推荐(0)
摘要:☆☆思路:做完1 和 2之后,直接套模板就完了。刚开始可以把1到9放入数组中,然后回溯搜索。 AC后再去掉数组进行优化。 class Solution { public List<List<Integer>> combinationSum3(int k, int n) { List<List<Int 阅读全文
posted @ 2020-12-28 21:14 不学无墅_NKer 阅读(73) 评论(0) 推荐(0)
摘要:思路:回溯搜索 + 剪枝。 注意,回溯做选择的方法,不适用于有 “有重复元素的数组”。因此,重点掌握 常规回溯算法的写法。 class Solution { public List<List<Integer>> combinationSum2(int[] candidates, int target 阅读全文
posted @ 2020-12-28 17:40 不学无墅_NKer 阅读(85) 评论(0) 推荐(0)
摘要:☆☆☆代码: 排序剪枝后效率更高 ~ class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res = new ArrayList< 阅读全文
posted @ 2020-12-28 16:51 不学无墅_NKer 阅读(121) 评论(0) 推荐(0)
摘要:☆☆☆☆思路:回溯 + 剪枝。 如果使用Set去重,不能AC class Solution { public List<List<Integer>> subsetsWithDup(int[] nums) { List<List<Integer>> res = new ArrayList<>(); A 阅读全文
posted @ 2020-12-28 12:30 不学无墅_NKer 阅读(76) 评论(0) 推荐(0)
摘要:☆☆☆思路:回溯算法。注意对比区分这三道题:求排列、求组合、求子集。 求组合 和 求子集 方法的对比: 更新res的位置不同:求组合时,res 的更新是当树到达底端时;而求子集,res的更新是树上每一个节点,走过的路径都是子集的一部分。 求组合 和 求排列 方法的对比: 树的形状不同:排列问题的树比 阅读全文
posted @ 2020-12-28 11:46 不学无墅_NKer 阅读(86) 评论(0) 推荐(0)
摘要:☆☆☆思路:与排列问题不同,组合问题只需要从当前位置往后搜索。而排列问题每次都需要从头寻找,需要用vis数组记录访问过的元素。 class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer> 阅读全文
posted @ 2020-12-27 22:01 不学无墅_NKer 阅读(74) 评论(0) 推荐(0)
摘要:思路1:回溯搜索全排列,使用Set暴力去重。 ☆☆☆思路2:回溯搜索 + 剪枝。 对原数组排序,保证相同的数字都相邻,然后每次填入的数一定是这个数所在重复数集合中「从左往右第一个未被填过的数字」 代码1:回溯搜索 + Set去重 代码1.1 ——交换位置确定数字(耗时:30ms) class Sol 阅读全文
posted @ 2020-12-27 20:59 不学无墅_NKer 阅读(109) 评论(0) 推荐(0)
摘要:【举一反三】: 剑指27.字符串的排列 ☆☆回溯算法入门级经典题目,理论讲解及分类习题:回溯算法入门级详解 + 练习(持续更新) 思路1:标记数组 思路2:交换位置。相比思路1,空间复杂度低。 class Solution { public List<List<Integer>> permute(i 阅读全文
posted @ 2020-12-27 11:16 不学无墅_NKer 阅读(67) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 ··· 8 下一页