![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
凡人的进击之路
这个作者很懒,什么都没留下…
展开
-
64. 最小路径和
64. 最小路径和 题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 **说明:**每次只能向下或者向右移动一步。 示例 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 题解 本题采用动态规划的方法,设置dp[i][j]表示从左上角的点出发到点(i,j)路径上最小的和,由于题目规定每次只能向下或者向右移动一步,所以dp[i][j]就只与它上面和它原创 2020-11-21 13:40:12 · 99 阅读 · 0 评论 -
968. 监控二叉树
968. 监控二叉树 题目描述 给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 示例 1: 输入:[0,0,null,0,0] 输出:1 解释:如图所示,一台摄像头足以监控所有节点。 题解 所有节点都有以下三种状态: 等待被摄像头监控,不妨设为状态0 已被监控,不妨设为状态1 安装了摄像头,不妨设为状态2 然后进行dfs 代码 //c++ //运行时间:12ms,在所有 C++ 提交中击败了9原创 2020-11-21 13:39:41 · 66 阅读 · 0 评论 -
416. 分割等和子集
416. 分割等和子集 题目描述 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元素和相等的子集. 题解 本题和0-1背包问题的思想差不多,但是也有一些区别,本题在初始化的时候是原创 2020-11-21 13:38:59 · 90 阅读 · 0 评论 -
343. 整数拆分
343. 整数拆分 题目描述 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 题解 采用动态规划求解,创建数组dp,dp[i]表示正整数i拆分后可得的最大乘积。对于正整数i,当i>=2时,可以进行拆分,假设拆为j和i-j,而i-j可以进行拆分,也可以不进行拆分,原创 2020-11-21 13:38:12 · 62 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
538. 把二叉搜索树转换为累加树 题目描述 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 示例 输入: 原始二叉搜索树: 5 / \ 2 13 输出: 转换为累加树: 18 / \ 20 13 题解 用反向的中序遍历原创 2020-11-21 13:37:42 · 47 阅读 · 0 评论 -
417. 太平洋大西洋水流问题
417. 太平洋大西洋水流问题 题目描述 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。 规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。 请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。 提示: 输出坐标的顺序不重要 m 和 n 都小于150 示例 给定下面的 5x5 矩阵: 太平洋 ~ ~ ~ ~ ~ ~原创 2020-11-21 13:36:45 · 190 阅读 · 0 评论 -
130. 被围绕的区域
130. 被围绕的区域 题目 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。 示例 X X X X X O O X X X O X X O X X 运行你的函数后,矩阵变为: X X X X X X X X X X X X X O X X 题解 矩阵中的字符包含三种类型: X 被X包围的O,要转换为X 没有被包围的O 可以在矩阵的最外层一圈进行dfs(O),这样它肯定是没有被包围的,并标记一下,比如转换为A原创 2020-11-21 13:36:16 · 96 阅读 · 0 评论 -
78.子集
78.子集 题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 题解 这类题的通用解法就是回溯,回溯算法的通用解法: res=[] def backtrack(nums,start,path)//(选择列表,选择开始位置,选择的路径) if 满足结束条件: res.add(path) return for 选择 in 选择列表 选择 backtrack(nums,start+1,原创 2020-11-21 13:35:10 · 75 阅读 · 0 评论 -
90. 子集 II
90. 子集 II 题目描述 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 题解 本题和子集这道题基本一样,只是会多加两步,排序和判断当前节点与前一个节点是否相等。 代码 class Solution { List<List<Integer>>res=new ArrayList<>(); public List<List<Integer>> subsetsWithD原创 2020-11-21 13:34:01 · 63 阅读 · 0 评论 -
529. 扫雷游戏
529. 扫雷游戏 题目描述 让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表没有相邻(上,下,左,右,和所有4个对角线)地雷的已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。 现在给出在所有未挖出的方块中(‘M’或者’E’)的下一个点击位置(行和列索引),根据以下规则,返回相应位置被点击后对应的面板: 如果一个地雷(‘M’)被挖出,游戏就结束了- 把它改原创 2020-11-21 13:32:04 · 185 阅读 · 0 评论 -
LeetCode130-被围绕的区域
130. 被围绕的区域 题目 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。 示例 X X X X X O O X X X O X X O X X 运行你的函数后,矩阵变为: X X X X X X X X X X X X X O X X 题解 矩阵中的字符包含三种类型: X 被X包围的O,要转换为X 没有被包围的O 可以在矩阵的最外层一圈进行dfs(O),这样它肯定是没有被包围的,并标记一下,比如转换为A原创 2020-09-21 16:05:28 · 153 阅读 · 0 评论 -
450. 删除二叉搜索树中的节点
题目描述 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明: 要求算法时间复杂度为 O(h),h 为树的高度。 题解 删除二叉树的节点, 如果root为空,直接return nullptr: 否则,如果root->val=key,那么分为四种情况: root->left=null&原创 2020-09-18 14:15:14 · 117 阅读 · 0 评论