![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
UQI-LIUWJ
这个作者很懒,什么都没留下…
展开
-
文巾解题 1816. 截断句子
1 题目描述2 解题思路emm,没啥思路。一行搞定class Solution: def truncateSentence(self, s: str, k: int) -> str: return(" ".join(s.split()[:k]))原创 2021-12-06 11:50:41 · 96 阅读 · 0 评论 -
文巾解题 372. 超级次方
1 题目描述2 解题思路2.1 直接算pow直接算b数组对应的值是多少,然后进行pow 求幂class Solution: def superPow(self, a: int, b: List[int]) -> int: return pow(a, int("".join(map(str,b))), 1337)class Solution: def superPow(self, a: int, b: List[int]) -> in..原创 2021-12-05 09:48:09 · 649 阅读 · 0 评论 -
文巾解题383. 赎金信
1 题目描述2 解题思路2.1 遍历 ransomNote如果这个字符在magazine中有的话,那将magazine中的这个字符remove掉,如果没有的话就是Falseclass Solution: def canConstruct(self, ransomNote: str, magazine: str) -> bool: ransomNote=list(ransomNote) magazine=list(magazine) ..原创 2021-12-04 11:24:17 · 280 阅读 · 0 评论 -
文巾解题 面试题 01.06. 字符串压缩
1 题目描述2 解题思路也很简单,从头到尾遍历一遍即可,先建立一个表示出现次数的字符串tmp,然后返回tmp和S中短的那个时间复杂度 O(n),空间复杂度O(n)class Solution: def compressString(self, S: str) -> str: if(len(S)==0): return("") tmp='' num=1 c=S[0] f.原创 2021-12-01 10:04:22 · 102 阅读 · 0 评论 -
文巾解题 1446. 连续字符
1 题目描述2 解题思路很简单,从头到尾一次遍历即可,时间复杂度O(n),空间复杂度O(1)class Solution: def maxPower(self, s: str) -> int: i=0 num=1 max_num=0 c='' for i in s: if(i==c): num+=1 else: .原创 2021-12-01 09:49:51 · 474 阅读 · 0 评论 -
文巾解题 45. 跳跃游戏 II
1 题目描述2 解题思路2.1 记录每个点可达的步数使用一个reach数组,reach[i]记录到达坐标i的时候,需要几跳。对于每个点i,更新它向后nums[i]个点的reach值一旦更新过了reach[len(nums)-1],也就是最后一个点的reach,那么返回。因为后面再更新这个reach,需要的跳数会更多class Solution: def jump(self, nums: List[int]) -> int: reach=[.原创 2021-09-23 14:01:24 · 136 阅读 · 0 评论 -
55. 跳跃游戏
1 题目描述2 解题思路使用贪心法,对于每一个可以跳到的下标,我们跳到可以跳到的的最远的地方。每一个可以跳到的下标,也即是从之前的点可以跳到的地方。class Solution: def canJump(self, nums: List[int]) -> bool: max_num=0 for i in range(len(nums)): if(max_num>=i):#表示我们之前的最远步数可以到达这个点原创 2021-09-23 13:06:18 · 106 阅读 · 0 评论 -
文巾解题 100. 相同的树
1 题目描述2 解题思路2.1 DFSclass Solution: def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: if(p==None and q==None): return True elif(p==None or q==None): return False def dfs(p_,q_): ..原创 2021-09-23 12:57:02 · 109 阅读 · 0 评论 -
文巾解题 326. 3的幂
1 题目描述2 解题思路2.1 循环递归class Solution: def isPowerOfThree(self, n: int) -> bool: if(n<=0): return False while(n%3==0): n=n//3 return(n==1)2.2 3^20的约数思路和文巾解题 231. 2的幂_UQI-LIUWJ的博客-CSDN博客...原创 2021-09-23 12:51:18 · 96 阅读 · 0 评论 -
文巾解题455. 分发饼干
1 题目描述2 解题思路:贪心为了尽可能满足最多数量的孩子,从贪心的角度考虑,应该按照孩子的胃口从小到大的顺序依次满足每个孩子,且对于每个孩子,应该选择可以满足这个孩子的胃口且尺寸最小的饼干。 贪心算法是需要证明正确性的,这里直接搬leetcode的证明了跟着思路来,有:class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int:...原创 2021-09-14 10:56:33 · 107 阅读 · 0 评论 -
文巾解题 53. 最大子序和
1 题目描述2 解题思路2.1 前缀和建立一个前缀和数据,来记录 sum(A[0~n])。那么sum(A[i,j])=sum(A[0~j])-sum(A[0~i-1])class Solution: def maxSubArray(self, nums: List[int]) -> int: tmp=[0] for i in nums: tmp.append(tmp[-1]+i) ma=-100000原创 2021-09-08 22:09:42 · 141 阅读 · 0 评论 -
文巾解题 113. 路径总和 II
1 题目描述2 解题思路2.1BFS 广度优先搜索我们设计一个这样的队列队列的每个元素是一个三元数组:从根节点到当前点的路径总和+当前节点+从根节点到当前节点的路径每次我们从队列中弹出一个元素的时候,我们考虑这个元素所对应的节点是不是叶子节点,如果是的话,判断当前路径总和是否是我们的target。如果是,将这一组路径加到要返回的列表中;如果不是,什么也不做否则,看此节点有没有左右儿子节点,有的话,将对应的元素送入队列# Definition for a binary原创 2021-09-02 05:04:07 · 133 阅读 · 0 评论 -
文巾解题 82. 删除排序链表中的重复元素 II
1 题目描述2 解题思路由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,因此我们只需要对链表进行一次遍历,就可以删除重复的元素。由于链表的头节点可能会被删除,因此我们需要额外使用一个哨兵指向链表的头节点。具体地,我们从指针tmp指向链表的哑节点,随后开始对链表进行遍历。如果当前 tmp.next 与 tmp.next.next 对应的元素相同,那么我们就需要将tmp.next 以及所有后面拥有相同元素值的链表节点...原创 2021-09-01 02:26:57 · 146 阅读 · 0 评论 -
文巾解题 17. 电话号码的字母组合
1 题目描述2 解题思路建立一个哈希表,然后一位一位加进去class Solution: def letterCombinations(self, digits: str) -> List[str]: d={'2':['a','b','c'], '3':['d','e','f'], '4':['g','h','i'], '5':['j','k','l'], '6':['m','n','o'],.原创 2021-08-31 10:34:57 · 119 阅读 · 0 评论 -
文巾解题 56. 合并区间
1 题目描述2 解题思路先将intervals按照开始的时间从小到大排序,然后我们建立一个记录结果的数组,和另一个表示当前区间的临时区间,然后对intervals从前向后遍历。 如果当前遍历的interval的开始点是在临时区间之内的,那么我们就考虑合并。否则,将临时区间写入记录结果的数组中,然后将当前区间赋值给临时区间class Solution: def merge(self, intervals: List[List[int]]) ->...原创 2021-08-30 08:57:12 · 125 阅读 · 0 评论 -
文巾解题1588. 所有奇数长度子数组的和
1 题目描述2 解题思路2.1 直接求解枚举子数组的长度和首位置class Solution: def sumOddLengthSubarrays(self, arr: List[int]) -> int: l=len(arr) ret=0 for i in range(1,l+1,2): for j in range(l-i+1): ret+=sum(arr[j:j.原创 2021-08-29 10:36:02 · 178 阅读 · 0 评论 -
文巾解题 1480. 一维数组的动态和
1 题目描述2 解题思路class Solution: def runningSum(self, nums: List[int]) -> List[int]: num=0 lst=[] for i in nums: num+=i lst.append(num) return(lst)原创 2021-08-28 17:17:02 · 126 阅读 · 0 评论 -
文巾解题 01.05. 一次编辑
1 题目描述2 解题思路:建立一个指针i+一个错位个数计数器num(表示长的字符的第i+num位和短的字符的第i位匹配)class Solution: def oneEditAway(self, first: str, second: str) -> bool: lf=len(first) ls=len(second) if(abs(lf-ls)>1): return False#长度相差.原创 2021-08-27 11:33:23 · 106 阅读 · 0 评论 -
文巾解题 881. 救生艇
1 题目描述2 解题思路:贪心我们把重量从低到高排序,尽量让最轻的人和最重的人在一艘船上。如果最轻的+最终的仍然比limit重,那么最重的人单独一艘船2.1 递归解决贪心class Solution: def numRescueBoats(self, people: List[int], limit: int) -> int: people.sort() def f(begin,end): prin...原创 2021-08-26 09:22:03 · 141 阅读 · 0 评论 -
【缺迪杰斯特拉和SPFA] 文巾解题 787. K 站中转内最便宜的航班
1 题目描述2 解题思路2.1 动态规划我们记dp[i][k]表示最后一个点是k,且从src已经经过了step条边时候的距离。那么我们最终的目标是要找到最小的dp[i][dst](i∈[1,k+1])每一次的转移方程为 dp[i][dst]=min(dp[i-1][src]+len([src,dst])于是我们使用动态规划,有:class Solution: def findCheapestPrice(self, n: int, flights: List.原创 2021-08-24 11:01:15 · 144 阅读 · 0 评论 -
文巾解题 1646. 获取生成数组中的最大值
1 题目描述2 解题思路直接模拟class Solution: def getMaximumGenerated(self, n: int) -> int: if(n==0): return 0 if(n==1): return 1 lst=[0]*(n+1) lst[1]=1 for i in range(2,n+1): .原创 2021-08-23 09:06:45 · 112 阅读 · 0 评论 -
文巾解题 面试题 01.04. 回文排列
1 题目描述2 解题思路2.1 哈希表创建一个哈希表,记录每个元素出现的次数。如果出现次数为奇数的元素只有一个或者没有,那么就是一个回文排列class Solution: def canPermutePalindrome(self, s: str) -> bool: d=dict() for i in s: if(i in d): d[i]+=1 ...原创 2021-08-22 10:31:46 · 105 阅读 · 0 评论 -
文巾解题 面试题 01.03. URL化
1 题目描述2 解题思路class Solution: def replaceSpaces(self, S: str, length: int) -> str: S=S[:length].replace(' ','%20') return(S)原创 2021-08-22 10:06:05 · 98 阅读 · 0 评论 -
文巾解题 面试题 01.02. 判定是否互为字符重排
1 题目描述2 解题思路2.1 replace对每一个在s1中的字符,如果s2中没有,那么说明两个不匹配,返回false;如果s2中有,那么将s2中的一个这个字符换成‘’如果s1全部遍历完了,都是匹配的,且s1和s2一样长,那么说明两个字符串通过重新排列后,是一样的,返回Trueclass Solution: def CheckPermutation(self, s1: str, s2: str) -> bool: if(len(s1)!=len(s2原创 2021-08-20 12:27:05 · 102 阅读 · 0 评论 -
文巾解题 面试题 01.01. 判定字符是否唯一
1 题目描述2 解题思路2.1 setlass Solution: def isUnique(self, astr: str) -> bool: l1=len(astr) l2=len(set(astr)) return l1==l22.2 位运算设置一个数字,他转化为二进制之后有26位 每一位一开始都是0,如果这个数字第一次出现,也就是对应的这一位设置为1;如果这个数字第二次出现,那么返回Falseclas...原创 2021-08-19 22:02:26 · 140 阅读 · 0 评论 -
文巾解题 136. 只出现一次的数字
1 题目描述2 解题思路2.1 count函数class Solution: def singleNumber(self, nums: List[int]) -> int: for i in nums: if(nums.count(i)==1): return i这个的时间复杂度很高2.2 逐个异或运算相同的数字进行异或运算,结果为0和0异或的结果就是自己那么我们把所有的数字异或在原创 2021-08-17 10:34:11 · 100 阅读 · 0 评论 -
文巾解题 190. 颠倒二进制位
1 题目描述2 解题思路2.1 方法1 字符串倒转class Solution: def reverseBits(self, n: int) -> int: x=bin(n)[2:]#将整数转换成二进制(0b开头的那种) tmp=x[::-1]#倒转二进制字符串 for i in range(len(tmp),32): print(len(tmp)) tmp+='0'#.原创 2021-08-17 10:26:23 · 119 阅读 · 0 评论 -
1 文巾解题 191. 位1的个数
1 题目描述2 解题思路2.1方法1:直接调用bin和列表中的count函数class Solution: def hammingWeight(self, n: int) -> int: return bin(n).count('1')2.2 方法2:移位+比较每一位是否为1class Solution: def hammingWeight(self, n: int) -> int: count=0 ..原创 2021-08-16 00:39:05 · 115 阅读 · 0 评论 -
文巾解题 198. 打家劫舍
1 题目描述2 解题思路2.1 正向动态规划从前向后找,我们记f(n,tmp)表示[0,n-1]的点中最大的偷窃金额总和为tmp,我们现在要考虑偷不偷n号点(下面的方法会超时!),step_now表示当前点偷,step_not_now表示当前点不偷class Solution: def rob(self, nums: List[int]) -> int: l=len(nums) def f(n,tmp): if(n=原创 2021-08-15 15:31:53 · 127 阅读 · 0 评论 -
文巾解题 70. 爬楼梯
1 题目描述2 解题思路动态规划:假设现在还有n阶台阶,那么我可以向下迈一步,然后子问题就变成了计算n-1阶台阶的步数;我们也可以向下迈两步,然后子问题就变成了计算n-2阶台阶的步数顺着这个思路,我们有(注意:这种方法会超时!所以不是最终代码)class Solution: def climbStairs(self, n: int) -> int: if(n==1): return 1 elif(n==2):原创 2021-08-15 11:23:45 · 86 阅读 · 0 评论 -
文巾解题 784. 字母大小写全排列
1 题目描述2 解题思路:回溯如果解决一个问题有多个步骤,每一个步骤有多种方法,题目又要我们找出所有的方法,可以使用回溯算法;回溯算法是在一棵树上的 深度优先遍历(因为要找所有的解,所以需要遍历);组合问题,相对于排列问题而言,不计较一个组合内元素的顺序性(即 [1, 2, 3] 与 [1, 3, 2] 认为是同一个组合),因此很多时候需要按某种顺序展开搜索,这样才能做到不重不漏。class Solution(object): ...原创 2021-08-14 13:10:10 · 153 阅读 · 0 评论 -
文巾解题 46. 全排列
1 题目描述2 解题思路:回溯如果解决一个问题有多个步骤,每一个步骤有多种方法,题目又要我们找出所有的方法,可以使用回溯算法; 回溯算法是在一棵树上的 深度优先遍历(因为要找所有的解,所以需要遍历); 组合问题,相对于排列问题而言,不计较一个组合内元素的顺序性(即 [1, 2, 3] 与 [1, 3, 2] 认为是同一个组合),因此很多时候需要按某种顺序展开搜索,这样才能做到不重不漏。class Solution: def permute(self, nums: List[in.原创 2021-08-14 11:41:51 · 84 阅读 · 0 评论 -
文巾解题 77. 组合
1 题目描述2 解题思路如果解决一个问题有多个步骤,每一个步骤有多种方法,题目又要我们找出所有的方法,可以使用回溯算法; 回溯算法是在一棵树上的深度优先遍历(因为要找所有的解,所以需要遍历); 组合问题,相对于排列问题而言,不计较一个组合内元素的顺序性(即 [1, 2, 3] 与 [1, 3, 2] 认为是同一个组合),因此很多时候需要按某种顺序展开搜索,这样才能做到不重不漏。既然是树形问题上的 深度优先遍历,因此首先画出树形结构。例如输入:n = 4, k = 2,我们可...原创 2021-08-14 11:26:57 · 105 阅读 · 0 评论 -
文巾解题 206. 反转链表
1 题目描述2 解题思路2.1 创建辅助链表# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def reverseList(self, head: ListNode) -> ListNode原创 2021-08-13 14:48:51 · 116 阅读 · 0 评论 -
文巾解题 994. 腐烂的橘子
1 题目描述2 解题思路2.1 多源广搜使用广搜的思想,但是和一般的广搜不同,这里一开始的队列不是一个元素,而是一开始就腐烂的所有橘子的坐标。同时我们队列里面的每一个元素是一个三元组,分别是腐烂橘子的坐标,和当前已经经过了的分钟数。对于每个已经腐烂的橘子,我们向外找一圈,将新鲜的橘子变成腐烂的橘子,然后原本新鲜位置橘子的坐标入队列。当队列为空,表示所有橘子都已经考虑过了。这时候我们看是否还有新鲜的橘子,有的话返回-1class Solution: def orange.原创 2021-08-12 15:43:24 · 143 阅读 · 0 评论 -
文巾解题 116. 填充每个节点的下一个右侧节点指针
1 题目描述2 解题思路:广搜记录每一层的节点数量,每次遍历一层,当遇到这一层最后一个节点时,它的next指向None,其余节点则指向后面一个class Solution: def connect(self, root: 'Node') -> 'Node': if(root==None): return None else: lst=[root] wh..原创 2021-08-11 15:42:33 · 105 阅读 · 0 评论 -
文巾解题 617. 合并二叉树
1 题目描述2 解题思路:深搜# 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 mergeTrees(self, .原创 2021-08-11 14:51:40 · 101 阅读 · 0 评论 -
文巾解题 695. 岛屿的最大面积
1 题目描述2 解题思路2.1 广搜广搜使用队列实现class Solution: def maxAreaOfIsland(self, grid: List[List[int]]) -> int: row=len(grid) column=len(grid[0]) num=0 for i in range(row): for j in range(column):原创 2021-08-10 15:42:27 · 141 阅读 · 0 评论 -
文巾解题 733. 图像渲染
1 题目描述2 解题思路注意一点,如果第一个要渲染的点,颜色和要渲染成的颜色是一样的,那么我们直接返回。不然的话会死循环。2.1 广度优先遍历广搜是使用队列来实现的class Solution: def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int) -> List[List[int]]: row=len(image) column=le.原创 2021-08-10 10:15:09 · 144 阅读 · 0 评论 -
文巾解题 567. 字符串的排列
1 题目描述2 解题思路:滑动窗口:因为不管排列怎么排,s1字符串中的各个字母的个数是不变的。所以我们可以先设定一个大小和s1一样的滑动窗口。然后对s1和滑动窗口扫到的s2部分进行排序。如果而这一样,就说明包含这样的排列class Solution: def checkInclusion(self, s1: str, s2: str) -> bool: needs, window = defaultdict(int), defaultdict(int) .原创 2021-08-09 17:23:56 · 85 阅读 · 0 评论