LeetCode
Aiclin
这个作者很懒,什么都没留下…
展开
-
LeetCode 9. 回文数(Easy)/ 564. 寻找最近的回文数(Hard)
题目链接代码class Solution: ### 0212 判断一半的数字(72 ms,14.7 MB) def isPalindrome(self, x: int) -> bool: # x为负 or x大于0且x的个位为0,直接返回False if x < 0 or (x > 0 and x % 10 == 0): return False res = 0 # 若当前数x.原创 2021-02-12 11:26:06 · 94 阅读 · 0 评论 -
LeetCode 89. 格雷编码(Medium)
题目链接题解Gray Code (镜像反射法,图解)思路代码class Solution: ### 0212 镜像反射法(48 ms,18.1 MB) def grayCode(self, n: int) -> List[int]: res, first_digit = [0], 1 # i表示位数,j表示上一轮格雷码的 逆序 取值 for i in range(n): for j in ran.原创 2021-02-12 10:57:33 · 109 阅读 · 0 评论 -
LeetCode 43. 字符串相乘(Medium)/ 415. 字符串相加(Easy)/ 36进制加法 / 171. Excel 表列序号(E)/ 989. 数组形式的整数加法(E)/ 进制问题!!
题目链接题解字符串相乘思路代码class Solution: ### 0210 模拟(124 ms,15 MB) def multiply(self, num1: str, num2: str) -> str: if num1 == '0' or num2 == '0': return '0' m, n = len(num1), len(num2) # 长度为m和n的两个数的乘积最多为(m+n)位数,至少为(m+.原创 2021-02-10 23:09:07 · 216 阅读 · 1 评论 -
LeetCode 217. 存在重复元素(Easy)
题目链接代码class Solution: ### 0209 哈希表(44 ms,21.4 MB) def containsDuplicate(self, nums: List[int]) -> bool: dct = {} for num in nums: dct[num] = num in dct if dct[num]: return True return False .原创 2021-02-09 22:09:39 · 83 阅读 · 0 评论 -
LeetCode 237. 删除链表中的节点(Easy)
题目链接代码# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: ### 0209 原地删除下一个节点(44 ms,15.2 MB) def deleteNode(self, node): """ :type .原创 2021-02-09 22:00:54 · 68 阅读 · 0 评论 -
LeetCode 7. 整数反转(Easy)
题目链接代码class Solution: ### 0209 逆序求解(52 ms,14.9 MB) def reverse(self, x: int) -> int: # 首先对x求绝对值 res, y = 0, abs(x) # 注意:bound也取绝对值,不分正负 bound = 2 ** 31 if x < 0 else 2 ** 31 - 1 # 当y中的位数还有时,进行循环 .原创 2021-02-09 21:11:46 · 100 阅读 · 0 评论 -
LeetCode 16. 最接近 target 的三数之和(Medium)
题目链接代码class Solution: ### 0208 排序 + 双指针(128 ms,14.7 MB) def threeSumClosest(self, nums: List[int], target: int) -> int: # 首先对数组排序 nums.sort() # 初始化与target最接近的值res为正无穷 n, res = len(nums), float('+inf') .原创 2021-02-08 22:49:03 · 119 阅读 · 0 评论 -
LeetCode 292. Nim 游戏(Easy)/ 319. 灯泡开关(M)/ 365. 水壶问题(M)
题目链接代码class Solution: # 0208 数学法(40 ms,14.9 MB) def canWinNim(self, n: int) -> bool: return n % 4 != 0原创 2021-02-08 22:22:20 · 109 阅读 · 0 评论 -
LeetCode 61. 旋转链表(Medium)/ 234. 回文链表(Easy)/ 148. 排序链表(Medium)/ 143. 重排链表(Medium)/ 328. 奇偶链表(Medium)
题目链接代码# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: ### 0208 遍历(40 ms,14.8 MB) def rotateRight(self, head: ListNode, k: int).原创 2021-02-08 22:14:50 · 159 阅读 · 0 评论 -
LeetCode 26.【原地】删除排序数组中的重复项(Easy)
题目链接代码class Solution: ### 0208 快慢双指针(44 ms,15.9 MB) def removeDuplicates(self, nums: List[int]) -> int: # 初始化快、慢双指针 i, j = 0, 1 # 当快指针不越界时,进行循环 while j < len(nums): # 若快、慢指针的元素不相等,慢指针前进,且记录慢指针指向.原创 2021-02-08 21:40:27 · 78 阅读 · 0 评论 -
LeetCode 230. 二叉搜索树中第 K 小的元素(Medium)
题目链接代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: ### 0208 迭代(44 ms,18.5 MB) def..原创 2021-02-08 21:12:21 · 88 阅读 · 0 评论 -
LeetCode 14. 最长公共前缀(Easy)
题目链接题解最长公共前缀思路代码class Solution: ### 0207 纵向对比(32 ms,15.1 MB) def longestCommonPrefix(self, strs: List[str]) -> str: if not strs: return '' length, n = len(strs[0]), len(strs) for i in range(length): .原创 2021-02-07 22:23:58 · 82 阅读 · 1 评论 -
LeetCode 231. 2的幂(Easy)/ 326. 3 的幂(Easy)/ 342. 4的幂(Easy)
题目链接题解2 的幂 (位运算,极简解法+图表解析)思路代码class Solution: ### 0207 位运算(56 ms,14.7 MB) def isPowerOfTwo(self, n: int) -> bool: # 前提:n是否大于0 return n > 0 and n & (n - 1) == 0...原创 2021-02-07 21:37:00 · 62 阅读 · 1 评论 -
LeetCode 59. 螺旋矩阵 II(Medium)/ 885.(从指定位置开始,逆时针走的)螺旋矩阵 II / 2326.(根据链表来生成一个)螺旋矩阵 IV
题目链接题解Spiral Matrix II (模拟法,设定边界,代码简短清晰)代码class Solution: ### 0207 模拟法(44 ms,14.8 MB) def generateMatrix(self, n: int) -> List[List[int]]: # 初始化边界下标和数字统计变量cnt l, r, t, b = 0, n-1, 0, n-1 cnt = 1 # 定义二维数组 .原创 2021-02-07 20:48:40 · 110 阅读 · 0 评论 -
LeetCode 448. 找到数组中所有缺失的数字(Easy)/ 41. 缺失的第一个正数(H)/ 1060.(有序数组中)缺失的第 K 个数(H)/ 442. 【1~N中】出现 2 次的数(M)
题目链接题解详细图解 448.找到所有数组中消失的数字代码class Solution: ### 0206 找规律(404 ms,22.8 MB) def findDisappearedNumbers(self, nums: List[int]) -> List[int]: res = [] # 第一次遍历:根据数组的值找到对应的下标 for num in nums: # 注意:这里需要使用绝对值来.原创 2021-02-06 22:28:13 · 287 阅读 · 1 评论 -
LeetCode 621. 任务调度器(Medium)
题目链接题解任务调度器思路代码class Solution: ### 0206 公式(72 ms,16.3 MB) def leastInterval(self, tasks: List[str], n: int) -> int: length = len(tasks) if length <= 1: return length # 统计每个task的数量 task_map = collectio.原创 2021-02-06 22:00:56 · 128 阅读 · 0 评论 -
LeetCode 112. 路径总和(Easy)/ 113. 路径总和 II(Medium)/ 437. 路径总和 III(Medium)/ 带权树的直径(Hard)/ 二叉树的路径问题!!!
题目链接题解路径总和 III代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: ### 0206 递归(176 ms,35.原创 2021-02-06 21:24:19 · 247 阅读 · 0 评论 -
LeetCode 338.【二进制中 1 的数量】比特位计数(Medium)
题目链接题解字符串解码思路代码class Solution: ### 0205 动态规划(84 ms,21.4 MB) def countBits(self, num: int) -> List[int]: dp = [0] * (num + 1) # 注意:只需遍历一半的下标即可! for i in range(num // 2 + 1): # 某个大的偶数可由另一个较小的偶数右移一位得到 .原创 2021-02-05 22:58:35 · 81 阅读 · 0 评论 -
LeetCode 94. (返回)二叉树的前序、中序、后序遍历(Medium)
题目链接代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: ### 0205 迭代(40 ms,14.9 MB) def .原创 2021-02-05 22:42:41 · 86 阅读 · 0 评论 -
LeetCode 20. 有效的括号(Easy)
题目链接题解有效的括号(辅助栈法,极简+图解)思路代码class Solution: ### 0205 辅助栈(36 ms,14.9 MB) def isValid(self, s: str) -> bool: dct = {'[': ']', '{': '}', '(': ')', '.': '.'} stack = ['.'] # 预先存放一个非括号值,防止一开始的空栈情况 for c in s: .原创 2021-02-05 22:26:38 · 138 阅读 · 0 评论 -
LeetCode 98. 验证二叉搜索树(Medium)/ 958. 验证完全二叉树(Medium)/ 450. 删除二叉搜索树中的节点(M)
题目链接题解验证二叉搜索树思路代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: ### 0204 递归(44 m.原创 2021-02-04 23:40:16 · 98 阅读 · 0 评论 -
LeetCode 538. 把二叉搜索树转换为累加树(Medium)
题目链接题解把二叉搜索树转换为累加树中序遍历(递归和迭代)思路代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: .原创 2021-02-04 22:41:46 · 93 阅读 · 0 评论 -
LeetCode 399. 除法求值(Medium)
题目链接题解图论问题 Floyd算法除法求值思路代码class Solution: ### 0203 Floyd算法(36 ms,15 MB) def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]: graph = collections.defaultdict(int) .原创 2021-02-03 23:03:27 · 131 阅读 · 1 评论 -
LeetCode 543. 二叉树的直径(Easy)/ 662. 二叉树的最大宽度(Medium)
题目链接题解二叉树的直径思路代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: ### 0203 DFS(52 ms,17 MB) def diameterOfBin.原创 2021-02-03 22:08:46 · 82 阅读 · 0 评论 -
LeetCode 394. 【根据括号展开】字符串解码(Medium)/ 面试题 01.06. 字符串压缩(Easy)/ 1047. 删除字符串中的所有相邻重复项【消消乐】
题目链接题解字符串解码(辅助栈法 / 递归法,清晰图解)思路代码class Solution: ### 0203 辅助栈(40 ms,14.9 MB) def decodeString(self, s: str) -> str: stack, res, multi = [], '', 0 for c in s: # 若当前字符为[,则入栈 # 注意:需重置res和multi,保存新的子.原创 2021-02-03 21:30:30 · 106 阅读 · 0 评论 -
LeetCode 17.【合并】二叉树(Easy)
题目链接题解合并二叉树动画演示 递归+迭代 617.合并二叉树思路代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: .原创 2021-02-02 23:18:30 · 95 阅读 · 0 评论 -
LeetCode 39.【总和为 target 的数组】组合总和 / 40. 组合总和 II(Medium)/ 377. 组合总和 Ⅳ(M)
题目链接题解组合总和思路代码class Solution: ### 0202 回溯法(84 ms,15 MB) def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: def backtrace(idx, sub, residue): # 若不剪枝,则需要考虑待求值为负的情况,直接返回 if re.原创 2021-02-02 22:02:02 · 133 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第 N 个结点(Medium)/ 调用 ListNode!!!
题目链接题解添加链接描述思路代码# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: ### 0202 双指针(44 ms,14.9 MB) def removeNthFromEnd(self,.原创 2021-02-02 21:29:54 · 147 阅读 · 0 评论 -
LeetCode 200. 岛屿数量(Easy)/ 695.岛屿的最大面积(Medium)/ 305. 岛屿数量 II(Hard)/ 130.【把O变成X】被围绕的区域(Medium)
题目链接题解200. 岛屿数量(DFS / BFS)思路代码class Solution: ### 0201 DFS(72 ms,18.7 MB) def numIslands(self, grid: List[List[str]]) -> int: # dfs使用 or def dfs(i, j): if not 0 <= i < len(grid) or not 0 <= j < .原创 2021-02-01 23:47:27 · 110 阅读 · 0 评论 -
LeetCode 139. 单词拆分(Medium)/ 140. 单词拆分 II(Hard)
题目链接题解动态规划+记忆化回溯 逐行解释 python3思路代码class Solution: ### 0201 动态规划(84 ms,14.9 MB) def wordBreak(self, s: str, wordDict: List[str]) -> bool: n = len(s) # dp[i]表示s的前i个字符能否由wordDict中单词表示 dp = [False] * (n + 1) .原创 2021-02-01 22:44:48 · 148 阅读 · 0 评论 -
LeetCode 78. 子集 / 90. 子集 II(Easy)/ 【排列】
子集子集 II题解回溯算法代码子集class Solution: ### 0201 迭代(48 ms,15.1 MB) def subsets(self, nums: List[int]) -> List[List[int]]: res = [[]] for num in nums: # 上一轮res表示已有的组合 # 列表生成式表示当前num与每一个已有组合进行搭配 ..原创 2021-02-01 22:04:38 · 100 阅读 · 0 评论 -
LeetCode 4. 寻找两个正序数组的中位数(Hard)/ 上中位数
题目链接题解寻找两个正序数组的中位数思路代码class Solution: def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: def getKthElement(k): """ - 主要思路:要找到第 k (k>1) 小的元素,那么就取 pivot1 = nums1[k/2-1] 和 pivot2.原创 2021-02-01 00:46:35 · 148 阅读 · 1 评论 -
LeetCode 49. 字母异位词分组(Medium)
题目链接题解字母异位词分组思路代码class Solution: ### 0131 排序(80 ms,17.6 MB) def groupAnagrams(self, strs: List[str]) -> List[List[str]]: dd = collections.defaultdict(list) for s in strs: # 直接对当前s排序,并作为键 key = .原创 2021-01-31 22:43:18 · 98 阅读 · 0 评论 -
LeetCode 461. 汉明距离(Easy)
题目链接代码class Solution: ### 0131 转换:统计1的数量(28 ms,14.7 MB) def hammingDistance(self, x: int, y: int) -> int: res = 0 xor = x ^ y # 法1 while xor: res += 1 xor &= xor - 1 # 法2.原创 2021-01-31 21:57:56 · 97 阅读 · 0 评论 -
LeetCode 208. 实现 Trie (前缀树)(Medium)/ 173. 二叉搜索树迭代器(M)/ 303. (前缀和)数组区间求和(E)
题目链接题解实现 Trie (前缀树)代码class Trie: ### 0130 字典树(108 ms,27.7 MB) def __init__(self): """ Initialize your data structure here. """ self.lookup = {} def insert(self, word: str) -> None: """ .原创 2021-01-30 22:28:12 · 83 阅读 · 1 评论 -
LeetCode 128. (找出)最长【数字连续的】序列(Medium)
题目链接题解最长连续序列思路代码class Solution: ### 0130 哈希表遍历(44 ms,15.6 MB) def longestConsecutive(self, nums: List[int]) -> int: if not nums: return 0 max_cnt = 1 # 至少从1开始 st = set(nums) # 遍历每一个数 for num i.原创 2021-01-30 21:48:53 · 105 阅读 · 1 评论 -
LeetCode 347. 前【K 个】高频元素(Medium)
题目链接题解前 K 个高频元素思路代码class Solution: ### 0128 堆排序(60 ms,17.5 MB) def topKFrequent(self, nums: List[int], k: int) -> List[int]: def heapify(p_idx, heap_size): max_idx = p_idx l_idx, r_idx = p_idx*2+1, p_idx*.原创 2021-01-29 23:18:49 · 103 阅读 · 0 评论 -
LeetCode 48. 旋转图像(Medium)/ 牛客 旋转一维数组 / 189. 旋转数组
题目链接题解 技巧题,再赠送一维形式的题目,快来秒懂!思路代码class Solution: ### 0129 找规律(24 ms,14.7 MB) def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ n = len(matri.原创 2021-01-29 21:28:00 · 162 阅读 · 0 评论 -
LeetCode 416. 分割等和子集(Medium)
题目链接题解分割等和子集思路代码class Solution: ### 0128 二维动态规划(1836 ms,29.9 MB) def canPartition(self, nums: List[int]) -> bool: n = len(nums) if n < 2: return False numsSum, numsMax = sum(nums), max(nums) if nums.原创 2021-01-28 22:27:59 · 90 阅读 · 0 评论 -
LeetCode 31. 下一个排列(Medium)/ 556. 下一个更大元素 III(M)
添加链接描述题目链接题解下一个排列思路代码class Solution: ### 0128 两遍扫描(44 ms,14.6 MB) def nextPermutation(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ # 从右往左寻找第一个递增的元素对,得到左原创 2021-01-28 21:11:06 · 106 阅读 · 0 评论