Python
一些题目的Python解法解析
皮_客
看完了点个赞呗 _φ_(. . )
展开
-
二叉搜索树中的众数Python解法
解析:由题可知,左子树必须小于等于根节点,右子树必须大于等于根节点,如果为众数,必然为相邻节点,若根节点和左儿子相同,那么左儿子的右儿子只能和根节点相同。同理,若根节点和右儿子相同,那么右儿子的左儿子只能和根节点相同。链接:https://leetcode.cn/problems/find-mode-in-binary-search-tree。给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。来源:力扣(LeetCode)原创 2023-02-25 14:33:20 · 141 阅读 · 0 评论 -
根据字符出现频率排序Python解法
链接:https://leetcode.cn/problems/sort-characters-by-frequency。给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序。一个字符出现的 频率 是它出现在字符串中的次数。对字符串进行遍历,对每个字符出现的次数进行记录,然后按照次数进行降序排列,最后对排序过的字符串遍历输出即可。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。解释: 'e'出现两次,'r'和't'都只出现一次。来源:力扣(LeetCode)原创 2023-02-17 12:18:54 · 887 阅读 · 0 评论 -
两个数组的交集Python解法
对两个数组进行去重,然后进行升序排列,从小到大依次进行比较,相同得值放入结果数组,两个数组指针有一个到顶了就退出循环比较。最后返回结果数组即可。输出结果中的每个元素一定是。原创 2022-10-05 23:36:56 · 2546 阅读 · 0 评论 -
摆动序列Python解法
相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。输入:nums = [1,17,5,10,13,15,10,5,16,8]...原创 2022-08-25 23:26:55 · 470 阅读 · 0 评论 -
整数替换Python解法
这里偶数是肯定对半折的,奇数到底是加一还是减一,主要是看奇数操作后的值能否更多的对半折,所以可以使用回溯。找出对折占比对多,操作最少的那一条路线即可。链接:https://leetcode.cn/problems/integer-replacement。如果 n 是奇数,则可以用 n + 1或n - 1替换 n。如果 n 是偶数,则用 n / 2替换 n。返回 n 变为 1 所需的 最小替换次数。来源:力扣(LeetCode)原创 2022-08-23 23:28:20 · 517 阅读 · 0 评论 -
整数拆分Python解法
很明显可以用动态规划,n=2时的值是知道的(2=1+1,1×1=1)。),并使这些整数的乘积最大化。你可以获得的最大乘积。原创 2022-07-21 12:58:59 · 3103 阅读 · 0 评论 -
最大单词长度乘积Python解法
如果不存在这样的两个单词,返回0。将有相同字符的字符串放在同一个key值下,将字符串数组中的字符一一遍历,每一个key值里的进行去重,当前字符串长度乘以剩下的字符串长度,取最大的值即可。链接https//leetcode.cn/problems/maximum-product-of-word-lengths。输入words=["abcw","baz","foo","bar","xtfn","abcdef"]解释这两个单词为"abcw","xtfn"。来源力扣(LeetCode).........原创 2022-07-20 02:34:27 · 1665 阅读 · 0 评论 -
最小高度树Python解法
给定数字n和一个有n-1条无向边的edges列表(每一个边都是一对标签),其中edges[i]=[ai,bi]表示树中节点ai和bi之间存在一条无向边。我们可以随机选取一个节点,以他为根节点,然后通过广度优先搜索找寻最长路径的叶子节点,再将这个节点作为根节点,然后进行广度优先搜索找寻深度最大的叶子节点,这两个节点之间的路径即为最长路径。当选择节点x作为根节点时,设结果树的高度为h。解释如图所示,当根是标签为1的节点时,树的高度是1,这是唯一的最小高度树。...原创 2022-07-19 01:02:06 · 206 阅读 · 0 评论 -
打家劫舍 III Python解法
除了root之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。使用后序遍历,从底部开始,因为相邻层不能同时“偷”,所以相邻层进行比较,从下往上,将最大值向上传递,类似DP数组。子树的最大值附加到当前节点的值上进行后序判断。链接https//leetcode.cn/problems/house-robber-iii。返回在不触动警报的情况下,小偷能够盗取的最高金额。小偷又发现了一个新的可行窃的地区。...原创 2022-07-18 15:54:25 · 401 阅读 · 0 评论 -
验证二叉树的前序序列化Python解法
所以可以设置一个值初始为1,每增加一个非叶子结点就+1,而每出现一个叶子节点(#)就减一,如果符合前序遍历的规则,那么在遍历完之前不会为0,因为非叶子节点一定多余叶子节点(#)。而遍历完后一定为0,因为叶子节点(#)只多一个。链接https//leetcode.cn/problems/verify-preorder-serialization-of-a-binary-tree。例如,上面的二叉树可以被序列化为字符串"9,3,4,#,#,1,#,#,2,#,6,#,#",其中#代表一个空节点。...原创 2022-07-15 18:03:42 · 336 阅读 · 0 评论 -
奇偶链表Python解法
给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/odd-even-linked-list 例: 输入: head = [2,1,3,5,6原创 2022-07-15 17:51:18 · 369 阅读 · 0 评论 -
摆动排序 II Python解法
给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。你可以假设所有输入数组都可以得到满足题目要求的结果。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/wiggle-sort-ii 例:输入:nums = [1,5,1,1,6,4]输出:[1,6,1,5,1,4]解释:[1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。解析:中间的数比两边的数大,那么原创 2022-07-13 12:32:03 · 387 阅读 · 0 评论 -
去除重复字母Python解法
给你一个字符串 ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。例:输入:输出:原创 2022-06-28 16:52:02 · 3240 阅读 · 0 评论 -
反转字符串中的元音字母Python解法
给你一个字符串 ,仅反转字符串中的所有元音字母,并返回结果字符串。元音字母包括 、、、、,且可能以大小写两种形式出现。例:输入:s = "hello"输出:"holle"解析:字符串中只有元音字母受到条件约束,所以我们只需要将元音字母进行存储,然后将字符串的元音字母进行反向替换即可,满足先进后出这个条件的首先想到的就是栈了。...原创 2022-06-24 19:38:15 · 994 阅读 · 0 评论 -
最佳买卖股票时机含冷冻期Python解法
给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown原创 2022-06-01 18:48:14 · 1420 阅读 · 1 评论 -
累加数Python解法
累加数 是一个字符串,组成它的数字可以形成累加序列。一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,序列中的每个后续数字必须是它之前两个数字之和。给你一个只包含数字 '0'-'9' 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。说明:累加序列里的数,除数字 0 之外,不会 以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。例:输入:"112358"输出:true解释..原创 2022-05-30 15:53:51 · 2067 阅读 · 0 评论 -
完美数Python解法
对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。给定一个 整数 n, 如果是完美数,返回 true;否则返回 false。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/perfect-number例:输入:num = 28输出:true解释:28 = 1 + 2 + 4 + 7 + 141, 2, 4, 7, 和 14 是 28 的所有正因子。解析:使用枚举法,我们可以一个值一个值.原创 2022-05-27 16:14:27 · 1970 阅读 · 0 评论 -
各位相加Python解法
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。例:输入: num = 38输出: 2解释: 各位相加的过程为:38 --> 3 + 8 --> 1111 --> 1 + 1 --> 2由于2 是一位数,所以返回 2。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/add-digits解析:题目的意思很明确,将十进制数的各个位置的数字相加,若得到的值超过9,则继续...原创 2022-05-24 20:51:37 · 2839 阅读 · 0 评论 -
猜数字大小Python解法
猜数字游戏的规则如下:每轮游戏,我都会从1到n 随机选择一个数字。 请你猜选出的是哪个数字。如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1或 0):-1:我选出的数字比你猜的数字小 pick < num1:我选出的数字比你猜的数字大 pick > num0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == nu...原创 2022-05-23 19:42:11 · 243 阅读 · 0 评论 -
找不同Python解法
给定两个字符串 s 和 t ,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。例:输入:s = "abcd", t = "abcde"输出:"e"解释:'e' 是那个被添加的字母。解析:因为t只是在s的基础上多出了一个字符,所以可以先将字符串转换成列表,然后对列表进行排序,再对两个列表中的字符进行一一比对,当匹配不上时返回结果即可。class Solution(object): def findTh原创 2022-05-20 11:19:27 · 1231 阅读 · 0 评论 -
判断子序列Python解法
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/is-subsequence例:输入:s = "abc", t = "ahbgdc"输出:true解析:将原字符串的字符一一与需要判断的字符串的字符进行比对即可.原创 2022-05-19 21:13:05 · 1000 阅读 · 0 评论 -
消除游戏Python解法
列表 arr 由在范围 [1, n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。给你整数 n ,返回 arr 最后剩下的数字。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/elimination-g原创 2022-05-19 20:58:22 · 522 阅读 · 0 评论 -
图片平滑器Python解法
图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。每个单元格的 平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)。给你一个表示图像灰度的m x n整数矩阵img,返回对图像的每个单元格平滑处理后的图像。来源...原创 2022-05-18 10:24:33 · 217 阅读 · 0 评论 -
分发饼干Python解法
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/assign-cookies例:原创 2022-05-16 20:55:34 · 689 阅读 · 0 评论 -
统计各位数字都不同的数字个数Python解法
给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。例:输入:n = 2输出:91解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字解析:类似于排列组合,例如高位数头部不能为0,所以最高位有9种选择(1-9),而下一位可以为0,所以是9-1+1还是9种选择,再下一位就是8种,以此类推。当然,我们还可以选择低位数,所以我们可以从一位数开始求解,在高位数时原创 2022-05-12 15:00:19 · 1493 阅读 · 0 评论 -
丑数 IIPython解法
给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。例:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。解析:使用三个指针,一个用来乘以2,一个用来乘以3,一个用来乘以5。class Solution(object): def nthUglyNumber(self, n): """ :type n:原创 2022-05-06 11:41:40 · 193 阅读 · 0 评论 -
丑数Python解法
丑数 就是只包含质因数 2、3 和 5 的正整数。给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。例:输入:n = 6输出:true解释:6 = 2 × 3解析:不停的对2,3,5相除然后判断结果即可。class Solution(object): def isUgly(self, n): """ :type n: int :rtype: bool "原创 2022-05-06 11:14:06 · 1417 阅读 · 0 评论 -
二叉树的所有路径Python解法
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。例:输入:root = [1,2,3,null,5]输出:["1->2->5","1->3"]解析:深度遍历,到叶子节点返回,然后一层一层的将节点值加在前面即可。# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, va原创 2022-04-27 11:22:44 · 1948 阅读 · 1 评论 -
单词规律Python解法
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/word-pattern例:输入: pattern = "abba", str = "dog cat cat dog"输出: true解析:不要从单个字符判断,而是从规.原创 2022-04-27 10:35:35 · 1212 阅读 · 0 评论 -
生命游戏Python解法
根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活细胞周围八原创 2022-04-27 10:05:37 · 1091 阅读 · 0 评论 -
递增的三元子序列Python解法
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/increasing-triplet-subsequence例:输入:nums = [1,2,3,4.原创 2022-04-24 17:02:33 · 771 阅读 · 0 评论 -
比特位计数Python解法
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。例:输入:n = 2输出:[0,1,1]解释:0 --> 01 --> 12 --> 10解析:数学题,二进制乘2相当于左移一位,并不会增加1的数目,而奇数相当于左移然后加1。class Solution(object): def countBits(self, n):原创 2022-04-24 16:24:21 · 812 阅读 · 0 评论 -
3 的幂Python解法
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/power-of-three例:输入:n = 27输出:true解析:判断,除3,递归。class Solution(object): def isPowerOfThree(self, n.原创 2022-04-24 15:28:39 · 1213 阅读 · 0 评论 -
环形链表 IIPython解法
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。来源:力扣(LeetCode)链接:https://leetcode-cn.com/p原创 2022-04-19 11:33:01 · 124 阅读 · 0 评论 -
二叉树的最近公共祖先Python解法
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree例:输入:root = [3,5,1,6,2,0,8,null.原创 2022-04-18 18:00:31 · 855 阅读 · 0 评论 -
二叉搜索树的最近公共祖先Python解法
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree例:输入: root = [6,2,8,.原创 2022-04-18 17:10:56 · 929 阅读 · 0 评论 -
组合总和 IIIPython解法
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:只使用数字1到9每个数字最多使用一次返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combination-sum-iii例:输入: k = 3, n = 7输出: [[1,2,4]]解释:1 + 2 + 4 = 7没有其他符合的组合了解析:因为没有顺序要求,而...原创 2022-04-18 16:49:52 · 252 阅读 · 0 评论 -
回文链表Python解法
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。例:输入:head = [1,2,2,1]输出:true解析:列表存储,翻转比对即可。# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val#原创 2022-04-17 00:03:55 · 815 阅读 · 0 评论 -
二叉搜索树中第K小的元素Python解法
给定一个二叉搜索树的根节点root,和一个整数k,请你设计一个算法查找其中第k个最小元素(从 1 开始计数)。例:输入:root = [3,1,4,null,2], k = 1输出:1解析:遍历树,然后排序,选择第k个元素。# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, val=0, left=None, right=None):# ...原创 2022-04-16 23:46:05 · 327 阅读 · 0 评论 -
求众数 IIPython解法
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。例:输入:[3,2,3]输出:[3]解析:用字典存储每个字符出现的次数,然后提取出次数大于目标次数的值。class Solution(object): def majorityElement(self, nums): """ :type nums: List[int] :rtype: List[int] """ co原创 2022-04-16 23:37:20 · 229 阅读 · 0 评论