【LeetCode | 0417. Pacific Atlantic Water Flow太平洋大西洋水流问题【Python】】教程文章相关的互联网学习教程文章

Leetcode练习(python):字符串类:第151题:翻转字符串里的单词:给定一个字符串,逐个翻转字符串中的每个单词。

题目: 翻转字符串里的单词:给定一个字符串,逐个翻转字符串中的每个单词。说明: 无空格字符构成一个单词。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 思路: 思路较简单。 程序:class?Solution: ????def?reverseWords(self,?s:?str)?->?str: ????????s?=?s.strip() ????????length?=?len(s) ????????index?=?length?-?1 ?????...

LeetCode 98. 验证二叉搜索树 | Python【代码】【图】

98. 验证二叉搜索树题目来源:https://leetcode-cn.com/problems/validate-binary-search-tree 题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入:2/ 1 3 输出: true示例 2: 输入:5/ 1 4/ 3 6 输出: false 解释: 输入为: [5,1,4,null...

Leetcode练习(Python):数学类:第12题:整数转罗马数字:给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

题目: 整数转罗马数字:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV...

Leetcode练习(Python):数学类:第9题:回文数:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。【图】

题目: 回文数:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。进阶: 你能不将整数转为字符串来解决这个问题吗? 思路: 思路一:将整数转为字符串。 思路二:直接颠倒数字。 程序1:class?Solution: ????def?isPalindrome(self,?x:?int)?->?bool: ????????if?x?<?0: ????????????return?False ????????x1?=?str(x)[::-1] ????????x2?=?int(x1) ????????if?x?==?x2: ????????????retu...

Leetcode练习(Python):数学类:第7题:整数反转:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

题目: 整数反转:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [?2^31, 2^31 ? 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 思路: 思路简单。 程序:class?Solution: ????def?reverse(self,?x:?int)?->?int: ????????if?-2**31?<?x?<?2**31?-?1: ????????????x?=?x ????????else: ????????????return?0 ????????if?ab...

[LeetCode in Python] 5403 (H) find the kth smallest sum of a matrix with sorted rows 有序矩阵中的第 k 个最小数组【代码】

题目 https://leetcode-cn.com/problems/find-the-kth-smallest-sum-of-a-matrix-with-sorted-rows/ 给你一个 m * n 的矩阵 mat,以及一个整数 k ,矩阵中的每一行都以非递减的顺序排列。 你可以从每一行中选出 1 个元素形成一个数组。返回所有可能数组中的第 k 个 最小 数组和。 示例 1: 输入:mat = [[1,3,11],[2,4,6]], k = 5 输出:7 解释:从每一行中选出一个元素,前 k 个和最小的数组分别是: [1,2], [1,4], [3,2], [3,4],...

Leetcode练习(Python):链表类:第148题:排序链表:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。

题目: 排序链表:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 思路: 看到时间复杂度为?O(n log n) ,想到使用二分法,但是在链表里的二分法还没有想到思路,先使用懒人方法做一下,竟然通过了,哈哈哈,万万没想到,之后再补按照要求的程序。 程序1:这个程序是不符合题目要求的,但是没想到会通过,哈哈哈,这个题目的空间复杂度为O(n)。 #?Definition?for?singly-linked?list. #?class?ListNode: #?????d...

Leetcode练习(Python):链表类:第61题:旋转链表:给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。

题目: 旋转链表:给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 思路: 将链表成环进行旋转,对于K,需要判断数目,使用超过了链表的长度。 程序: #?Definition?for?singly-linked?list. #?class?ListNode: #?????def?__init__(self,?x): #?????????self.val?=?x #?????????self.next?=?Noneclass?Solution: ????def?rotateRight(self,?head:?ListNode,?k:?int)?->?ListNode: ????????if?not?hea...

Leetcode练习(Python):哈希表类:第76题:最小覆盖子串:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。

题目: 最小覆盖子串:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。说明:如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,我们保证它是唯一的答案。 思路: 使用滑动窗口法。 程序: from?collections?import?defaultdict class?Solution: ????def?minWindow(self,?s:?'str',?t:?'str')?->?'str': ????????if?not?s?or?not?t: ????????????return?"" ????????fi...

Leetcode练习(Python):哈希表类:第37题:解数独:编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9

题目: 解数独:编写一个程序,通过已填充的空格来解决数独问题。? 一个数独的解法需遵循如下规则:? 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 空白格用 '.' 表示。?? 思路: 这道题太难了,按照自己的思路从昨晚到现在了,实现不了,还是水平不够高吧,后来看了官方的解答,发现自己的思路一开始就设计错了,太难了,理解了一下官方的程序,然后...

Leetcode练习(Python):递归类:面试题07. 重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

题目: 重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 思路: 简单 程序: # Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode: ...

Leetcode练习(Python):数组类:第238题:给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除

题目: 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。??提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。 进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。) 思...

Leetcode练习(Python):数组类:第228题:给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。

题目: 给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。 思路: 本题思路简单。 程序: class?Solution: ????def?summaryRanges(self,?nums:?List[int])?->?List[str]: ????????length?=?len(nums) ????????if?length?<=?0: ????????????return?[] ????????if?length?==?1: ????????????return?[str(nums[0])] ????????result?=?[] ????????head?=?0 ????????for?index?in?range(1,?length): ????????????if?nums[ind...

Leetcode练习(Python):数组类:第167题:给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中

题目: 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。? 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。? 说明:? 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。?? 思路: 因为有存在相同元素的可能,且是升序排列,所以使用双指针法好一些。 程序: class?Solution: ????def?twoSum(self,?n...

Leetcode练习(Python):数组类:第106题:根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。

题目: 根据一棵树的中序遍历与后序遍历构造二叉树。? 注意: 你可以假设树中没有重复的元素。 思路: 与第105题类似,区别是前序遍历一开始找的是左子树的结点,后续遍历一开始找的是右子树的结点,因为从后面开始找数字。 程序: #?Definition?for?a?binary?tree?node. #?class?TreeNode: #?????def?__init__(self,?x): #?????????self.val?=?x #?????????self.left?=?None #?????????self.right?=?Noneclass?Solution(object): ?...