LeetCode分类题解
根据LeetCode官方分类整理的题解,逐行解释
朱师傅哈
这个作者很懒,什么都没留下…
展开
-
20. 有效的括号(Valid Parentheses)
20. 有效的括号(Valid Parentheses)题解栈复杂度分析PythonJava(待完成)题解有效的括号问题,一般使用栈来解决,若出现一个右括号,判断栈顶的是否为相匹配的左括号,是则出栈,否则入栈。遇到左括号就入栈。显然,有效的括号一定保证最终栈为空,若出现一个右括号,栈已空,则一定无效。栈初始化括号对应关系dict={")":"(","}":"{","]":"["}dic...原创 2019-12-27 13:49:36 · 291 阅读 · 1 评论 -
17. 电话号码的字母组合(Letter Combinations of a Phone Number)
17. 电话号码的字母组合(Letter Combinations of a Phone Number)题解回溯复杂度分析PythonJava(待完成)题解第一时间想到回溯,因为这种找全部的解,常规都是使用回溯回溯初始化词典phone={"2":["a","b","c"],⋯ }phone=\{"2":["a","b","c"],\cdots\}phone={"2":["a","b",...原创 2019-12-26 23:25:15 · 250 阅读 · 0 评论 -
14. 最长公共前缀(Longest Common Prefix)
14. 最长公共前缀(Longest Common Prefix)题解水平扫描复杂度分析PythonJava(待完成)Pythonic的解法复杂度分析PythonJava(待完成)题解水平扫描想法:取字符串数组中的第一个字符串为resresres,逐个和剩下的字符串比较并更新resresres特判,若字符串数组为空,返回"""""",或只有一个字符串,返回strs[0]strs[0]...原创 2019-12-26 22:27:15 · 126 阅读 · 0 评论 -
13. 罗马数字转整数(Roman to Integer)
13. 罗马数字转整数(Roman to Integer)题解一次遍历复杂度分析PythonJava(待完成)题解借助哈希表保存所有的罗马字符,包括’I’:1, ‘IV’:4, ‘V’:5, ‘IX’:9, ‘X’:10, ‘XL’:40, ‘L’:50, ‘XC’:90, ‘C’:100, ‘CD’:400, ‘D’:500, ‘CM’:900, ‘M’:1000。一次遍历初始化词典...原创 2019-12-26 21:42:14 · 263 阅读 · 0 评论 -
12. 整数转罗马数字(Integer to Roman)
12. 整数转罗马数字(Integer to Roman)题解贪心算法复杂度分析PythonJava(待完成)题解显然的想法,和凑零钱的问题一样,每次选择最大的,可以保证用的罗马字符最少且最终的组合唯一。贪心算法初始化词典numtochar={1:"I",⋯ ,1000:"M"}numtochar=\{1:"I",\cdots,1000:"M"\}numtochar={1:"I",⋯,...原创 2019-12-26 20:19:29 · 156 阅读 · 0 评论 -
6. Z 字形变换(ZigZag Conversion)
6. Z 字形变换(ZigZag Conversion)题解标志转向复杂度分析PythonJava(待完成)题解标志转向特判,若行数numRows<2numRows<2numRows<2,返回sss初试化res=["",⋯ ,""]res=["",\cdots,""]res=["",⋯,""],长度为numRowsnumRowsnumRows,res[i]res[...原创 2019-12-25 22:10:52 · 282 阅读 · 0 评论 -
3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)
3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)题解滑动窗口复杂度分析PythonJava(待完成)题解滑动窗口初始化集合memomemomemo保存当前无重复字符的子串初始化结果max_len=0max\_len=0max_len=0和当前子串的长度cur_len=0cur\_len=0cur_len=0,...原创 2019-12-25 20:29:05 · 120 阅读 · 0 评论 -
416. 分割等和子集(Partition Equal Subset Sum)
416. 分割等和子集(Partition Equal Subset Sum)题解动态规划复杂度分析PythonJava(待完成)题解本题的难点,将其转化为0−10-10−1背包问题。动态规划由二进制的两条性质得到递推公式:dp[i]={dp[i−1]+1i为奇数dp[i//2]i为偶数dp[i]=\left\{\begin{array}{ll}{dp[i-1]+1} & {i为...原创 2019-12-17 14:26:24 · 202 阅读 · 0 评论 -
338. 比特位计数(Counting Bits)
338. 比特位计数(Counting Bits)题解动态规划复杂度分析PythonJava(待完成)题解本题主要考察二进制的自身特性。二进制的两个特性:奇数的二进制中1的个数=它上一位偶数的二进制中1的个数+1如:(3)10=(11)2,(2)10=(10)2(3)_{10}=(11)_{2},(2)_{10}=(10)_{2}(3)10=(11)2,(2)10=(10)2...原创 2019-12-17 10:36:11 · 244 阅读 · 0 评论 -
322. 零钱兑换(Coin Change)
322. 零钱兑换(Coin Change)题解记忆化回溯(自顶向下)复杂度分析PythonJava(待完成)动态规划(自下而上)复杂度分析PythonJava(待完成)题解记忆化回溯(自顶向下)如上图,在回溯过程中,将中间结果保存下来,这样可将复杂度降低到O(n)O(n)O(n)。初始化记忆词典memo={0:0}memo=\{0:0\}memo={0:0},表示0元的组成种类为0...原创 2019-12-16 16:54:42 · 323 阅读 · 0 评论 -
304. 二维区域和检索 - 矩阵不可变(Range Sum Query 2D - Immutable)
303. 区域和检索 - 数组不可变(Range Sum Query - Immutable)题解缓存+动态规划复杂度分析PythonJava(待完成)题解缓存+动态规划同样借助于缓存的思想:如图所示:若求蓝色区域内的元素和,等于蓝色区域右下角到(0,0)(0,0)(0,0)处的累加和去掉红色绿色和绿色部分的累加和。红色部分+绿色部分=矩阵左上角(0,0)(0,0)(0,0)到红色部分...原创 2019-12-13 15:00:56 · 102 阅读 · 0 评论 -
303. 区域和检索 - 数组不可变(Range Sum Query - Immutable)
303. 区域和检索 - 数组不可变(Range Sum Query - Immutable)题解缓存+动态规划复杂度分析PythonJava(待完成)题解每次调用函数计算一次都需要O(n)O(n)O(n)复杂度,因此借助缓存来保存区域和。若使用二维dpdpdp,dp[i][j]dp[i][j]dp[i][j]表示iii到jjj的区域和,需要O(n2)O(n^{2})O(n2)空间复杂度。...原创 2019-12-13 14:30:19 · 101 阅读 · 0 评论 -
300. 最长上升子序列(Longest Increasing Subsequence)
300. 最长上升子序列(Longest Increasing Subsequence)题解动态规划复杂度分析PythonJava(待完成)动态规划+二分查找复杂度分析PythonJava(待完成)题解动态规划dp[i]dp[i]dp[i]表示到当前位置的最长上升子序列的长度。特判,若数组为空,返回0初试化dp=[1,1,⋯ ,1]dp=[1,1,\cdots,1]dp=[1,1...原创 2019-12-12 22:03:17 · 106 阅读 · 0 评论 -
279. 完全平方数(Perfect Squares)
279. 完全平方数(Perfect Squares)题解动态规划复杂度分析PythonJava(待完成)动态规划+空间优化复杂度分析PythonJava(待完成)题解动态规划dp[i]dp[i]dp[i]表示iii最少可以由几个平方数构成。初试化dp=[0,1,2,⋯ ,n]dp=[0,1,2,\cdots,n]dp=[0,1,2,⋯,n],长度为n+1n+1n+1。遍历dpdpdp...原创 2019-12-12 14:25:00 · 323 阅读 · 0 评论