![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
tomjobs
别慌,慌也没用
展开
-
LeetCode 142. 环形链表 II(快慢指针)
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?思路:追及相遇问题,像个物理题。首先利用快慢指针,只要两个指针最终相遇了,就能判断出现了环。假设环大小为bbb,环外部分大小为aaa原创 2021-10-26 11:29:46 · 247 阅读 · 0 评论 -
LeetCode 952. 按公因数计算最大组件大小(并查集)
给定一个由不同正整数的组成的非空数组 A,考虑下面的图:有 A.length 个节点,按从 A[0] 到 A[A.length - 1] 标记;只有当 A[i] 和 A[j] 共用一个大于 1 的公因数时,A[i] 和 A[j] 之间才有一条边。返回图中最大连通组件的大小。思路:将每个数质因数分解,得到的素因子个数很少。然后按照素因子为单位进行并查集连接(一个数包含的所有素因子全部并在一起),最后按照数字个数统计并查集大小。class Solution {public: Solutio原创 2021-10-23 15:23:51 · 272 阅读 · 0 评论 -
LeetCode 297. 二叉树的序列化与反序列化
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方原创 2021-10-23 12:57:31 · 168 阅读 · 0 评论 -
LeetCode 48. 旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。思路:又是一道利用原地空间的题。每次遇到一个位置就交换到旋转后的位置,然后用临时变量存下被交换位置的值,每个点交换4次,交换1/4个矩阵就可以了。class Solution {public: void rotate(vector<vector<int>>& matri原创 2021-10-23 10:53:38 · 154 阅读 · 0 评论 -
LeetCode 30. 串联所有单词的子串(哈希+双指针)
给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = “barfoothefoobarman”, words = [“foo”,“bar”]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 “barfoo” 和 “foobar” 。输出的顺序不重要, [9,0] 也是有效答案原创 2021-10-23 00:39:46 · 226 阅读 · 0 评论 -
LeetCode 189. 旋转数组( 三种O(1)解法 )
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入原创 2021-10-22 20:23:17 · 242 阅读 · 0 评论 -
LeetCode 41. 缺失的第一个正数(复位,利用空间)
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1提示:1 <= nums.length <= 5 * 105-231 <= nums[i] <= 231 - 1思路:很经典的题,充分利用数原创 2021-10-22 17:14:24 · 140 阅读 · 0 评论 -
LeetCode 76. 最小覆盖子串(双指针)
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”示例 2:输入:s = “a”, t = “a”输出:“a”示例 3:输入: s = “a”, t = “原创 2021-10-13 21:21:33 · 227 阅读 · 0 评论 -
LeetCode 662. 二叉树最大宽度(层序遍历,防溢出)
题意:给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。思路:一开始用深度优先遍历计数来写的,但是这样会溢出。通过层序遍历,每次优先遍历完这一层,并且计数值减去起点计数值,就不会溢出了。class Solution {public: int widthOfBinaryTree原创 2021-10-12 20:38:12 · 241 阅读 · 0 评论 -
LeetCode 312. 戳气球(区间DP)
有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。求所能获得硬币的最大数量。示例 1:输入:nums = [3,1,5,8]输出:167解释:nums原创 2021-10-11 22:41:35 · 281 阅读 · 0 评论 -
LeetCode 301. 删除无效的括号(DFS剪枝)
给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。示例 1:输入:s = “()())()”输出:["(())()","()()()"]示例 2:输入:s = “(a)())()”输出:["(a())()","(a)()()"]示例 3:输入:s = “)(”输出:[""]提示:1 <= s.length <= 25s 由小写英文字母以及括号 ‘(’ 和 ‘)’ 组成s 中至多含原创 2021-10-11 18:49:34 · 241 阅读 · 0 评论 -
LeetCode 208. 实现 Trie (前缀树)
Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。boolean startsWith(S原创 2021-10-11 16:12:59 · 147 阅读 · 0 评论 -
LeetCode 84. 柱状图中最大的矩形(单调栈)
思路:单调栈可以用来求左边(右边)第一个大于(小于)自己的数,因为在栈中的元素一定是保证单调的。本题转换一下,实际就是求每个数左边第一个小于自己的位置和右边第一个小于自己的位置,单调栈维护一下就好了。class Solution {public: int largestRectangleArea(vector<int>& heights) { heights.push_back(-1); int n = heights.size(); .原创 2021-10-11 11:02:39 · 197 阅读 · 0 评论 -
LeetCode 352. 将数据流变为多个不相交区间(区间)
给你一个由非负整数 a1, a2, …, an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表。实现 SummaryRanges 类:SummaryRanges() 使用一个空数据流初始化对象。void addNum(int val) 向数据流中加入整数 val 。int[][] getIntervals() 以不相交区间 [starti, endi] 的列表形式返回对数据流中整数的总结。示例:输入:[“SummaryRanges”, “addNum”, “getInter原创 2021-10-10 00:18:27 · 229 阅读 · 0 评论 -
LeetCode 60. 排列序列(第k个排列)
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。示例 1:输入:n = 3, k = 3输出:“213”示例 2:输入:n = 4, k = 9输出:“2314”示例 3:输入:n = 3, k = 1输出:“123”提示:1 <= n <= 91 <= k &l原创 2021-09-16 13:02:01 · 169 阅读 · 0 评论 -
LeetCode 1745. 回文串分割 IV(分为三个回文串,manacher)
给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。示例 1:输入:s = “abcbdd”输出:true解释:“abcbdd” = “a” + “bcb” + “dd”,三个子字符串都是回文的。示例 2:输入:s = “bcbddxy”输出:false解释:s 没办法被分割成 3 个回文子字符串。提示:3 <= s.length <= 2000s原创 2021-09-15 21:37:47 · 395 阅读 · 0 评论 -
LeetCode 647. 回文子串(DP或马拉车)
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:s = “abc”输出:3解释:三个回文子串: “a”, “b”, “c”示例 2:输入:s = “aaa”输出:6解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”提示:1 <= s.l原创 2021-09-15 19:17:50 · 195 阅读 · 0 评论 -
LeetCode 448. 找到所有数组中消失的数字(原地交换)
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。示例 1:输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]示例 2:输入:nums = [1,1]输出:[2]提示:n == nums.length1 <= n <= 1051 <= nums[i] <= n进阶:你能在不使用额外空间且时间复杂度为 O(n)原创 2021-09-14 17:06:28 · 184 阅读 · 0 评论 -
LeetCode 442. 数组中重复的数据(原地改变)
给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]思路:条件非常苛刻,要保证O(n)和无额外空间,因此只能想到利用数组本身的空间。注意到1≤a[i]≤n1≤a[i]≤n1≤a[i]≤n,这就是个突破口首先默认下标为0,所以将所有数字减一。将每个数字对应自己位置上数加上nnn,数原创 2021-09-14 16:45:06 · 185 阅读 · 0 评论 -
LeetCode 300. 最长递增子序列(LIS)
思路:经典的DP问题最简单的dpdpdp定义是dp[i]dp[i]dp[i]代表以nums[i]nums[i]nums[i]结尾的数的最长递增子序列,那么转移就是dp[i]=max(dp[j]+1),j<idp[i]=max(dp[j]+1), j<idp[i]=max(dp[j]+1),j<i,复杂度O(n2)O(n^2)O(n2)不过还是可以优化,定义dp[i]dp[i]dp[i]代表长度为iii的递增子序列结尾数的最小值,如果是INF则代表不存在长度为iii的递增子序列。转.原创 2021-09-05 15:49:44 · 147 阅读 · 0 评论 -
LeetCode 470. 用 Rand7() 实现 Rand10()(拒绝采样)
思路:貌似腾讯面试很喜欢这道题拒绝采样法就是随机两次,当成一个7进制数,那么生成的范围就是1~49。结果大于40就舍弃重来,如下图。(转自leetcode官方题解)class Solution {public: int rand10() { while(1) { int x1 = rand7(), x2 = rand7(); int idx = x1 + (x2 - 1) * 7; if(id.原创 2021-09-04 16:17:25 · 181 阅读 · 0 评论 -
LeetCode11. 盛最多水的容器
思路:一开始想到了单调栈,但正解是贪心+双指针:枚举横轴长度,双指针每次淘汰掉左右较小的值当横轴长度为nnn的时候,纵轴高度为min(a[0],a[n−1])min(a[0],a[n-1])min(a[0],a[n−1])当横轴长度为n−1n-1n−1的时候,淘汰掉左右两边的较小一个,因此纵轴高度为max(min(a[0],a[n−2]),min(a[1],a[n−1]))max(min(a[0],a[n-2]),min(a[1],a[n-1]))max(min(a[0],a[n−2]),min(a.原创 2021-08-21 19:42:57 · 205 阅读 · 0 评论 -
LeetCode 2. 两数相加(链表)
题意:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。思路:链表模拟题 */class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* head = l1;原创 2021-08-21 15:37:57 · 93 阅读 · 0 评论 -
LeetCode 148. 排序链表(归并)
题意:给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。思路:很巧妙的一道题,想到归并就好做了。class Solution {public: ListNode* mergeList(ListNode* l1, ListNode* l2) { ListNode* head = new ListNode(0); ListNode* node = head; while(l1 && l2) {原创 2021-08-21 01:50:36 · 139 阅读 · 0 评论 -
LeetCode 382. 链表随机节点(蓄水池算法)
思路:啥是蓄水池算法:参考链接:https://www.jianshu.com/p/7a9ea6ece2af给定一个数据流,数据流长度N很大,且N直到处理完所有数据之前都不可知,请问如何在只遍历一遍数据(O(N))的情况下,能够随机选取出m个不重复的数据。相当于是一串水流,水池只能装下m滴水,那么装满了以后只能随机去掉一滴再放进新的一滴。解法:对于前mmm个数,直接放进水池之后的数,假设为第kkk个,那么有mk\frac{m}{k}km的概率保留,同时水池中的每个数有mk∗1m=1k.原创 2021-08-20 22:50:13 · 230 阅读 · 0 评论 -
LeetCode 115. 不同的子序列(DP)
思路:定义dp[i][j]dp[i][j]dp[i][j]代表字符串sss前iii个字符中,存在多少个字符串ttt前jjj个字符的子序列。class Solution {public: int numDistinct(string s, string t) { int n = s.size(),m = t.size(); vector<vector<long long>>dp(n + 1,vector(m + 1,0ll)); .原创 2021-03-17 15:01:38 · 149 阅读 · 0 评论 -
LeetCode 315. 计算右侧小于当前元素的个数(树状数组)
思路:树状数组裸题class Solution {public: const static int maxn = 3e4 + 7; int c[maxn]; void add(int x,int v) { while(x < maxn) { c[x] += v; x += x & -x; } } int query(int x) { int res =.原创 2021-03-17 14:34:15 · 189 阅读 · 0 评论 -
LeetCode 188. 买卖股票的最佳时机 IV(DP)
给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:k = 2, prices = [2,4,1]输出:2解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。示例 2:输入:k = 2, pr原创 2021-03-17 12:55:08 · 157 阅读 · 0 评论 -
LeetCode 123. 买卖股票的最佳时机 III(DP)
思路:定义dp[i][0/1/2/3]dp[i][0/1/2/3]dp[i][0/1/2/3]代表考虑前iii个股票,第二维0代表买了一次,1代表买了一次卖了一次,2代表买了一次卖了一次又买了一次,3代表买卖了两次。转移就是dp[i][0] = max(dp[i - 1][0],-prices[i]);dp[i][1] = max(dp[i - 1][1],dp[i - 1][0] + prices[i]);dp[i][2] = max(dp[i - 1][2],dp[i - 1][1] - p.原创 2021-03-17 11:53:57 · 100 阅读 · 0 评论 -
LeetCode 面试题 17.14. 最小K个数(快速排序求前k小)
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。示例:输入: arr = [1,3,5,7,2,4,6,8], k = 4输出: [1,2,3,4]提示:0 <= len(arr) <= 1000000 <= k <= min(100000, len(arr))思路:这里只介绍快速排序的解法,当然二叉堆也可以写,只不过期望复杂度更高一些。快速排序每次递归得到一个分界点,分界点左边的数都大于等于他,右边的数都小于等于他。因此可以判断分界点与kkk的关原创 2021-03-17 09:42:55 · 268 阅读 · 0 评论 -
LeetCode 59 螺旋矩阵 II(模拟)
思路:就硬模拟,不解释class Solution {public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>>ans(n,vector(n,0)); int x = 0,y = -1,cnt = 1; int len = n; while(cnt <= n * n) { .原创 2021-03-16 23:40:31 · 130 阅读 · 0 评论 -
LeetCode 403. 青蛙过河(基础DP)
一只青蛙想要过河。 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有)。 青蛙可以跳上石头,但是不可以跳入水中。给定石子的位置列表(用单元格序号升序表示), 请判定青蛙能否成功过河(即能否在最后一步跳至最后一个石子上)。 开始时, 青蛙默认已站在第一个石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元格1跳至单元格2)。如果青蛙上一步跳跃了 k 个单位,那么它接下来的跳跃距离只能选择为 k - 1、k 或 k + 1个单位。 另请注意,青蛙只能向前方(终点的方向原创 2021-03-16 21:38:12 · 213 阅读 · 0 评论 -
LeetCode 17. 电话号码的字母组合(基础搜索)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2:输入:digits = “”输出:[]示例 3:输入:digits = “2”输出:[“a”,“b”,“c”]提示:0 <= digits.length <= 4原创 2021-03-16 20:13:58 · 80 阅读 · 0 评论 -
LeetCode 486. 预测赢家(博弈DP,最小化最大值)
给定一个表示分数的非负整数数组。 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,…… 。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。给定一个表示分数的数组,预测玩家1是否会成为赢家。你可以假设每个玩家的玩法都会使他的分数最大化。示例 1:输入:[1, 5, 2]输出:False解释:一开始,玩家1可以从1和2中进行选择。如果他选择 2(或者 1 ),那么玩家 2 可以原创 2021-03-14 20:52:13 · 198 阅读 · 0 评论 -
LeetCode 207. 课程表(判断有向图是否有环)
你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。示例 1:输入:numC原创 2021-03-14 20:06:18 · 373 阅读 · 0 评论 -
LeetCode 331. 验证二叉树的前序序列化(统计度数,栈)
给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。示例 1:输入: “9,3,4,#,#,1,#,#,2,#,6,#,#”输出: true示例 2:输入: “1,#”输出: false示例 3:输入: “9,#,#,1”输出: false思路:两种写法,统计度数和栈。统计度数: 根节点入度为0,出度为2;其他有效节点的入度为1,出度为2;每个无效节点的入度为1,出度为0。遍历过程中只要保证除了最后一个节点的出度,所有遍历过节点出度-原创 2021-03-13 21:12:40 · 183 阅读 · 0 评论 -
LeetCode 124. 二叉树中的最大路径和(递归)
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。思路:递归的时候记录从这个点往下得到路径的最大权值和;那么遍历每一个点,找到其左右叶子向下遍历能得到的最大路径和,加上该点点权,得到的就是包含子树经过中经过该点的最大路径和。需要注意的一点是点权可能是负的。class Solution {原创 2021-03-13 17:20:31 · 272 阅读 · 0 评论 -
LeetCode 224. 基本计算器(表达式求值)
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。示例 1:输入:s = “1 + 1”输出:2示例 2:输入:s = " 2-1 + 2 "输出:3示例 3:输入:s = “(1+(4+5+2)-3)+(6+8)”输出:23提示:1 <= s.length <= 3 * 105s 由数字、’+’、’-’、’(’、’)’、和 ’ ’ 组成s 表示一个有效的表达式思路:基础的表达式求值。class Solution {public: t原创 2021-03-11 19:42:01 · 419 阅读 · 0 评论 -
LeetCode 227. 基本计算器 II(表达式求值)
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。示例 1:输入:s = “3+2*2”输出:7示例 2:输入:s = " 3/2 "输出:1示例 3:输入:s = " 3+5 / 2 "输出:5提示:1 <= s.length <= 3 * 105s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开s 表示一个 有效表达式表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1]原创 2021-03-11 19:40:55 · 425 阅读 · 0 评论 -
LeetCode 542. 01 矩阵(多源BFS,DP)
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:[[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]示例 2:输入:[[0,0,0],[0,1,0],[1,1,1]]输出:[[0,0,0],[0,1,0],[1,2,1]]提示:给定矩阵的元素个数不超过 10000。给定矩阵中至少有一个元素是 0。矩阵中的元素只在四个方向上相邻: 上、下、左、原创 2021-03-11 15:02:15 · 187 阅读 · 0 评论