随笔分类 - leetcode刷题
摘要:题目描述:统计所有小于非负整数 n 的质数的数量。 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 质数就是除了 1 和本身找不到其他能除尽的数!思路一:暴力法(超时) class Solution: def countPrimes(s
阅读全文
摘要:给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。 进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。 示例: 输入:(7 -> 2 -
阅读全文
摘要:试探算法也叫回溯法,它选择先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是正确的解时,就选择下一个候选解。如果当前候选解除不满足规模要求外,能够满足所有其他要求,则继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求,
阅读全文
摘要:思路: 考虑每一个节点,小偷有两种选择,偷,或者不偷。 用res[?, ?]存储这两种情况下能偷到的最多的钱。res[0]表示不偷该节点能得到的最多的钱,res[1]表示偷了该节点能得到的最多的钱。 1.如果某个节点是NULL,那么显然,res=[0, 0]2.如果节点不为空: 1)不偷此节点的话,
阅读全文
摘要:题目描述:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 = "horse", word2 = "ros"输出:3解释:horse
阅读全文
摘要:方法1:动态规划 最重要的是变换思想,从知道鸡蛋数K,知道层数N,求最少次数M;转化为知道鸡蛋数K,假设最多只能扔M次,求最大能排除的层数。 创建一个二维列表dp[K][N]来记录最大能排除层数(M<=N,即使一层一层扔,最多也只会扔N次,保证不会溢出)。 dp[0][:]=0 : 0个鸡蛋,无论扔
阅读全文
摘要:class Solution: def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]: res=[] def traceback(node,trace,sum): if not node: return if node.val=
阅读全文
摘要:方法一:递归写法(分治思想) class Solution: def myPow(self, x: float, n: int) -> float: if n == 0: return 1 if n < 0: return 1 / self.myPow(x, -n) # 如果是奇数 if n & 1
阅读全文
摘要:class Solution: def exist(self, board: List[List[str]], word: str) -> bool: def dfs(i, j, k): if not 0 <= i < len(board) or not 0 <= j < len(board[0])
阅读全文
摘要:class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode: if not preorder or not inorder: return None root = TreeNode(
阅读全文
摘要:题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] 。请问 k[0]*k[1]*...*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的
阅读全文
摘要:题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示
阅读全文
摘要:题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 思路步骤: 1.确定根节点root;2.遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右边为右子树;3.遍历
阅读全文
摘要:1.先序遍历:根节点->左子树->右子树 1 # 先序打印二叉树(递归) 2 def preOrderTraverse(node): 3 if node is None: 4 return None 5 print(node.val) 6 preOrderTraverse(node.left) 7
阅读全文
摘要:题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度
阅读全文
摘要:概念 最大公约数:指两个或多个整数公有约数中最大的一个 最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数 二者关系:两个数之积=最小公倍数*最大公约数 方法1:辗转相除法 a=int(input('please enter 1st num
阅读全文
摘要:题目描述: 输入一个正整数,按照从小到大的顺序输出它的所有质因子(如180的质因子为2 2 3 3 5 )最后一个数后面也要有空格 示例1 输入 180 输出 2 2 3 3 5 a = int(input()) def q(x): zhi = 1 for i in range(2,int(x**0
阅读全文
摘要:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 方法1:暴力求解使用简单的循环判断,我们的思路是顺序扫描整个数组,每扫到一个数字,逐个比较该数自和它后面的数字大小这种方法
阅读全文
摘要:输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例: 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]思路:本问题可以利用回溯法的思想解决。我们不知道它明确的计算法则。而是先进行试
阅读全文
摘要:问题:输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 解题思路: 1.本来我想的是用二维数组的动态规划方法:用s[i][j]表示从第i个元素到第j个元素之间的所有子数组的和的最大值 我在初始化二维数组s的时候遇到
阅读全文

浙公网安备 33010602011771号