
leetcode
想念@思恋
这个作者很懒,什么都没留下…
展开
-
力扣-142 环形链表Ⅱ
题目:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回null。思路:(1)假设链表有a+b个结点(从head到链表环入口共a个结点,链表环共b个结点);(2)设快、慢指针分别走了f、s步,那么会有以下两个结论:f=2*sf=s+n*>b<----快指针多走了n个环的长度;(3)由(2)可得,s=n*b;(4)再假设,我们从head指针开始,一直走到环的入口,共走了k步,那么k=a+n*b,此时由于慢指针slow已经走了n*b步(s=.原创 2022-02-28 19:55:00 · 268 阅读 · 0 评论 -
力扣-1994 好子集的数目
解题思路参考链接https://leetcode-cn.com/problems/the-number-of-good-subsets/solution/py3-by-mao1112-sxmx/,我在此基础上添加了自己的理解。"""解题思路:找出所有数字的组合,【每种组合的次数=各数字次数的成绩】注意:限制数字<=30,考虑暴力解。"""import collectionsclass Solution: def numberOfGoodSubsets(self, nu.原创 2021-10-31 21:42:39 · 287 阅读 · 0 评论 -
力扣-前缀和的应用和优化
力扣-560. 和为 K 的子数组参考自:https://leetcode-cn.com/problems/subarray-sum-equals-k/solution/he-wei-kde-zi-shu-zu-by-leetcode-solution/class Solution1: def subarraySum(self, nums, k): res = 0 n = len(nums) # 暴力解-相当于三重循环 for .原创 2021-10-25 10:58:27 · 114 阅读 · 0 评论 -
力扣-22 括号生成
class Solution: def generateParenthesis(self, n: int) -> List[str]: # 特点:当前某个组合中,右括号的数量一定比左括号少 # 利用回溯算法 left_p = ["(" for _ in range(n)] right_p = [")" for _ in range(n)] # print(left_p, right_p) sel原创 2021-06-29 20:40:48 · 146 阅读 · 0 评论 -
力扣-55 跳跃游戏
# 超时class Solution: def canJump(self, nums: List[int]) -> bool: # 回溯+贪心算法 if len(nums) == 1: return True self.flag = 0 self.backtrack(0, nums[:]) if self.flag == 1: return True转载 2021-06-28 23:32:26 · 265 阅读 · 0 评论 -
力扣-60 排列序列
回溯算法–超时class Solution: def getPermutation(self, n: int, k: int) -> str: self.res = {} cur = "" nums = [str(i) for i in range(1, n+1)] self.pos = 0 # print(nums) self.backtrack(nums[:], cur).原创 2021-06-08 10:43:48 · 192 阅读 · 0 评论 -
力扣 306累加树
'''采用了一种比较麻烦的方法:先通过双重循环找到第一个数字和第二个数字,然后循环计算后边的value。'''class Solution: def isAdditiveNumber(self, num: str) -> bool: nums = [n for n in num] self.res = False # 第一个数肯定在字符串的前1/2,通过记录数字的位置,来计算数字和 # 最重要的是确定第一原创 2021-06-06 16:20:53 · 153 阅读 · 0 评论 -
力扣-40 组合总和II
class Solution: def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]: self.res = [] candidates = sorted(candidates) self.n = len(candidates) self.backtrack([],0,0, target, candidates[:])转载 2021-06-02 21:16:47 · 118 阅读 · 0 评论 -
力扣-79 单词搜索
# 使用回溯算法class Solution: def exist(self, board: List[List[str]], word: str) -> bool: # 有个二维列表记录当前位置是否走过 # 记录走过的路径,如果word在走过的路径中,则返回true self.res = False # m * n 的矩阵 m = len(board) n = len(board[0])原创 2021-05-26 09:29:02 · 105 阅读 · 0 评论 -
力扣-46 全排列
class Solution: def permute(self, nums: List[int]) -> List[List[int]]: self.res = [] choice = nums[:] # print(choice) self.drawback(0, nums[:], choice) return self.res def drawback(self, i, nums, choice)原创 2021-05-14 21:52:01 · 154 阅读 · 0 评论 -
力扣-322 零钱兑换
'''自己的想法,超时'''class Solution: def coinChange(self, coins: List[int], amount: int) -> int: # 动态规划 dp = [1 for i in range(len(coins))] # 最简单的状态 # if amount == 0: # return 0 # dp[amount] = num原创 2021-04-06 20:09:31 · 132 阅读 · 0 评论 -
力扣-662 二叉树最大宽度
# 自己的想法,超时# 层次遍历,记录每一层的最左节点和最右节点位置class Solution: def widthOfBinaryTree(self, root: TreeNode) -> int: # if not root: # return 0 # 层次遍历 queue = collections.deque() queue.append(root) max_v = 0原创 2021-03-30 20:08:04 · 161 阅读 · 0 评论 -
力扣-437 路径总和III
参考自https://leetcode-cn.com/problems/path-sum-iii/solution/qian-zhui-he-di-gui-hui-su-by-shi-huo-de-xia-tian/前缀和–是指到达当前元素的路径之前所有元素的和在同一个路径之下,如果两个数的前缀和是相同的,那么这些节点之间的元素总和为零那么,在同一个路径之下,在节点A的前缀和与节点B的前缀和相差target,则位于节点A和节点B之间的元素之和是target。(如当前已知路径为A->C->.转载 2021-02-25 22:35:06 · 230 阅读 · 0 评论 -
力扣-684 冗余连接
# 利用并查集class Solution: def findRedundantConnection(self, edges: List[List[int]]) -> List[int]: n = len(edges) parent = list(range(n+1)) def find(index): # 找到当前节点index的父节点 if parent[index]==index:原创 2021-02-15 22:34:29 · 177 阅读 · 0 评论 -
力扣-5 最长回文子串
# 双重循环,会超时class Solution: def longestPalindrome(self, s: str) -> str: n = len(s) dp = [[False] * n for _ in range(n)] # 注意定义二维列表的方法 ans = "" # 枚举子串的长度,从0开始 for l in range(n): # 枚举子串的起始位置 i,这样可以通过转载 2021-02-04 20:57:29 · 143 阅读 · 0 评论 -
力扣-236 二叉树的最近公共祖先
class Solution: def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': if root is None: return None path = [] path_dict = {} # 记录当前点经历过的路径,重点 def PreOrder(roo原创 2021-01-29 12:35:27 · 184 阅读 · 0 评论 -
力扣112、113 路径总和I、II
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def hasPathSum(self, root: TreeNode, sum: int) -> bool: if roo原创 2021-01-12 10:48:37 · 184 阅读 · 0 评论 -
力扣111 二叉树的最小深度
# 层次遍历class Solution: def minDepth(self, root: TreeNode) -> int: if root is None: return 0 queue = [] layer = [] cur = root queue.append(cur) layer.append(1) min_layer =原创 2021-01-12 09:29:19 · 175 阅读 · 0 评论 -
力扣105\106 从前序与中序遍历序列构造二叉树、从中序与后序遍历序列构造二叉树
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNo转载 2021-01-11 23:31:25 · 89 阅读 · 0 评论 -
力扣-103 二叉树的锯齿形层序遍历
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None# 解法一:前序遍历,记录每层从左到右的节点,然后进行翻转class Solution: def zigzagLevelOrder(self, root: TreeNode) -原创 2021-01-09 14:20:25 · 234 阅读 · 0 评论 -
力扣-101 对称二叉树
一开始打算利用递归遍历(根->左->右)和(根->右->左)结果是否相同来判断一颗二叉树是否是对称二叉树,但是一直存在漏洞;之后尝试结合三种遍历中的两种来做,发现仍然有漏洞。最后想到的办法是将空节点也加入到结果列表中,成功解决。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left.原创 2021-01-08 10:28:33 · 243 阅读 · 0 评论 -
力扣刷题-100 相同的树
# 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 = right''' 第100题'''class Solution: def isSameTree(self, p: TreeN原创 2021-01-02 16:36:45 · 204 阅读 · 0 评论 -
力扣刷题-94 中序遍历
''' 第94题'''# 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: # 递归 def inorderTraversal(se原创 2021-01-02 18:11:25 · 222 阅读 · 0 评论 -
力扣-102、107 二叉树的层次遍历I、II
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None# 解题关键--使用字典,记录每一层的节点; #前序遍历的方法class Solution: def levelOrder(self, root: TreeNode) -原创 2021-01-03 18:11:28 · 147 阅读 · 1 评论