Leetcode
记录一些自己的Leetcode题解,很多不是最优解,先把代码腾上来,空了把最优解补一下
皓首不倦
算法爱好者 码农一枚 欢迎志同道合 技术爱好者加微信CODER-GRH 非技术人员勿扰
展开
-
Leetcode 793 阶乘函数后K个零
class Solution: def get_score(self, val): cnt = 0 base = 5 while val // base != 0: cnt += val // base base *= 5 return cnt def preimageSizeFZF(self, K: int) -> int: l, r = 0, 1000.原创 2020-05-08 18:18:57 · 164 阅读 · 0 评论 -
Leetcode 879 盈利计划
from functools import lru_cacheclass Solution: def profitableSchemes(self, G: int, P: int, group: List[int], profit: List[int]) -> int: val = [(g, p) for g, p in zip(group, profit)] val.sort(key = lambda x : x[0], reverse=True) .原创 2020-05-08 18:17:22 · 258 阅读 · 0 评论 -
Leetcode 1153 字符串转化
class Solution: def canConvert(self, str1: str, str2: str) -> bool: if str1 == str2: return True s = set(str2) if len(s) == 26: ''' 字符串2把所有字符种类26种都占满了,字符串1只有可能一开始也是占满26种字符才有转成功的可能性 .原创 2020-05-08 18:15:43 · 623 阅读 · 0 评论 -
Leetcode 936 戳印序列
'''倒着进行推导,如果Target的一个子串和stamp相等,那target和stamp对齐的位置就可以全部变成?然后?可以作为下一次匹配中的通配字符,如果最后target能变成全?,那就转换成功关键在于怎么能快速在某个位置变成?之后知道哪些target中的区间能和stamp配起来,进而产生更多的?可以先枚举长度为len(stamp)所有的窗口,target窗口中和stamp不同的位置就是该窗口在等待变成?的位置,每个窗口都可以统计出等待变成?的位置集合,每次迭代都把当前等待集合为空的区间.原创 2020-05-08 18:12:10 · 208 阅读 · 0 评论 -
Leetcode 221 最大正方形
public class Solution { public int maximalSquare(char[][] matrix) { int rows = matrix.length, cols = rows > 0 ? matrix[0].length : 0; int[][] dp = new int[rows + 1][cols + 1]; int maxsqlen = 0; for (int i = 1; i <.原创 2020-05-08 18:10:36 · 108 阅读 · 0 评论 -
Leetcode 446 等差数列划分 II - 子序列
'''dfs 枚举可能的排列 勉强可以过'''from typing import Listclass Solution: def numberOfArithmeticSlices(self, A: List[int]) -> int: n = len(A) if n < 3: return 0 pos = [{} for _ in range(n)] pos[n-1][A[n-1]]..原创 2020-05-08 18:08:45 · 236 阅读 · 0 评论 -
Leetcode 644 最大平均子段和 II
'''二分法找平均数的可能值,如果选择了一个平均值之后,序列中所有数值减去这个待选平均值之后,有长度大于等于k的子数组和是大于0的,说明待选值偏小,反之偏大,两个边界足够靠拢时候查找停止'''from typing import Listclass Solution: def findMaxAverage(self, nums: List[int], k: int) -> float: def check(avg): data = [..原创 2020-05-08 18:06:44 · 1136 阅读 · 0 评论 -
Leetcode 479 最大回文数乘积
'''枚举可能的回文数字,验证该数值是否能够被给定范围内的因子整除'''class Solution: def largestPalindrome(self, n: int) -> int: if n == 1: return 9 max_val = int(10 ** (n) - 1) min_val = int(10 ** (n-1)) for i in range(max_val, mi.原创 2020-05-08 18:04:26 · 181 阅读 · 0 评论 -
Leetcode 839 相似字符串组
from typing import List'''并查集求连通分量个数'''class MergeSet: def __init__(self): self.m = {} self.__root_cnt = 0 def getRoot(self, node): root = node buf = [] while self.m[root] != root: buf.ap..原创 2020-05-08 18:00:17 · 179 阅读 · 0 评论