diff --git "a/0392.\345\210\244\346\226\255\345\255\220\345\272\217\345\210\227/0392-\345\210\244\346\226\255\345\255\220\345\272\217\345\210\227.py" "b/0392.\345\210\244\346\226\255\345\255\220\345\272\217\345\210\227/0392-\345\210\244\346\226\255\345\255\220\345\272\217\345\210\227.py" new file mode 100644 index 0000000..fb0353b --- /dev/null +++ "b/0392.\345\210\244\346\226\255\345\255\220\345\272\217\345\210\227/0392-\345\210\244\346\226\255\345\255\220\345\272\217\345\210\227.py" @@ -0,0 +1,13 @@ +class Solution(object): + def isSubsequence(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + i, j = 0, 0 + while i < len(s) and j < len(t): + if s[i] == t[j]: + i += 1 + j += 1 + return i == len(s) \ No newline at end of file diff --git "a/0477.\346\261\211\346\230\216\350\267\235\347\246\273\346\200\273\345\222\214/0477-\346\261\211\346\230\216\350\267\235\347\246\273\346\200\273\345\222\214.py" "b/0477.\346\261\211\346\230\216\350\267\235\347\246\273\346\200\273\345\222\214/0477-\346\261\211\346\230\216\350\267\235\347\246\273\346\200\273\345\222\214.py" new file mode 100644 index 0000000..9ce810a --- /dev/null +++ "b/0477.\346\261\211\346\230\216\350\267\235\347\246\273\346\200\273\345\222\214/0477-\346\261\211\346\230\216\350\267\235\347\246\273\346\200\273\345\222\214.py" @@ -0,0 +1,20 @@ +class Solution(object): + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + if not nums: + return 0 + res = 0 + mask = 1 + for i in range(32): + cnt_one = 0 + for num in nums: + cnt_one += 1 if num & mask else 0 + + res += cnt_one * (len(nums) - cnt_one) + mask = mask << 1 + return res + + \ No newline at end of file diff --git "a/0543.\344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204/0543-\344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204.py" "b/0543.\344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204/0543-\344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204.py" new file mode 100644 index 0000000..49542b5 --- /dev/null +++ "b/0543.\344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204/0543-\344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204.py" @@ -0,0 +1,26 @@ +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def diameterOfBinaryTree(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if not root: + return 0 + self.res = 0 + def height(node): + if not node: + return 0 + left_h = height(node.left) + right_h = height(node.right) + + self.res = max(self.res, left_h + right_h) + return 1 + max(left_h, right_h) + height(root) + return self.res \ No newline at end of file diff --git "a/0646.\346\234\200\351\225\277\346\225\260\345\257\271\351\223\276/0646-\346\234\200\351\225\277\346\225\260\345\257\271\351\223\276.py" "b/0646.\346\234\200\351\225\277\346\225\260\345\257\271\351\223\276/0646-\346\234\200\351\225\277\346\225\260\345\257\271\351\223\276.py" new file mode 100644 index 0000000..fc77aab --- /dev/null +++ "b/0646.\346\234\200\351\225\277\346\225\260\345\257\271\351\223\276/0646-\346\234\200\351\225\277\346\225\260\345\257\271\351\223\276.py" @@ -0,0 +1,16 @@ +class Solution(object): + def findLongestChain(self, pairs): + """ + :type pairs: List[List[int]] + :rtype: int + """ + pairs = sorted(pairs, key = lambda x: x[1]) + + end = pairs[0][0] - 1 + res = 0 + for pair in pairs: + if pair[0] > end: + res += 1 + end = pair[1] + + return res \ No newline at end of file diff --git "a/0792.\345\214\271\351\205\215\345\255\220\345\272\217\345\210\227\347\232\204\345\215\225\350\257\215\346\225\260/0792-\345\214\271\351\205\215\345\255\220\345\272\217\345\210\227\347\232\204\345\215\225\350\257\215\346\225\260.py" "b/0792.\345\214\271\351\205\215\345\255\220\345\272\217\345\210\227\347\232\204\345\215\225\350\257\215\346\225\260/0792-\345\214\271\351\205\215\345\255\220\345\272\217\345\210\227\347\232\204\345\215\225\350\257\215\346\225\260.py" new file mode 100644 index 0000000..81e7c4a --- /dev/null +++ "b/0792.\345\214\271\351\205\215\345\255\220\345\272\217\345\210\227\347\232\204\345\215\225\350\257\215\346\225\260/0792-\345\214\271\351\205\215\345\255\220\345\272\217\345\210\227\347\232\204\345\215\225\350\257\215\346\225\260.py" @@ -0,0 +1,31 @@ +class Solution(object): + def numMatchingSubseq(self, S, words): + """ + :type S: str + :type words: List[str] + :rtype: int + """ + from collections import defaultdict + + dic = defaultdict(list) + for i, ch in enumerate(S): + dic[ch].append(i) + + res = 0 + for word in words: + pre = -1 + flag = True + for i, ch in enumerate(word): + l = dic[ch] + # 在l找第一个比pre大的元素 + idx = bisect.bisect(l, pre) + + if idx == len(l):# 没找到 + flag = False + break + pre = l[idx] + + if flag: + res += 1 + + return res \ No newline at end of file diff --git "a/1180.\347\273\237\350\256\241\345\217\252\345\220\253\345\215\225\344\270\200\345\255\227\346\257\215\347\232\204\345\255\220\344\270\262/1180-\347\273\237\350\256\241\345\217\252\345\220\253\345\215\225\344\270\200\345\255\227\346\257\215\347\232\204\345\255\220\344\270\262.py" "b/1180.\347\273\237\350\256\241\345\217\252\345\220\253\345\215\225\344\270\200\345\255\227\346\257\215\347\232\204\345\255\220\344\270\262/1180-\347\273\237\350\256\241\345\217\252\345\220\253\345\215\225\344\270\200\345\255\227\346\257\215\347\232\204\345\255\220\344\270\262.py" new file mode 100644 index 0000000..d3e9c18 --- /dev/null +++ "b/1180.\347\273\237\350\256\241\345\217\252\345\220\253\345\215\225\344\270\200\345\255\227\346\257\215\347\232\204\345\255\220\344\270\262/1180-\347\273\237\350\256\241\345\217\252\345\220\253\345\215\225\344\270\200\345\255\227\346\257\215\347\232\204\345\255\220\344\270\262.py" @@ -0,0 +1,14 @@ +class Solution(object): + def countLetters(self, S): + """ + :type S: str + :rtype: int + """ + res = 0 + for i in range(len(S)): + for j in range(i + 1, len(S) + 1): + substring = S[i:j] + if substring == substring[0] * len(substring): + res += 1 + # print substring + return res \ No newline at end of file diff --git "a/1207.\347\213\254\344\270\200\346\227\240\344\272\214\347\232\204\345\207\272\347\216\260\346\254\241\346\225\260/1207-\347\213\254\344\270\200\346\227\240\344\272\214\347\232\204\345\207\272\347\216\260\346\254\241\346\225\260.py" "b/1207.\347\213\254\344\270\200\346\227\240\344\272\214\347\232\204\345\207\272\347\216\260\346\254\241\346\225\260/1207-\347\213\254\344\270\200\346\227\240\344\272\214\347\232\204\345\207\272\347\216\260\346\254\241\346\225\260.py" new file mode 100644 index 0000000..76dc9b9 --- /dev/null +++ "b/1207.\347\213\254\344\270\200\346\227\240\344\272\214\347\232\204\345\207\272\347\216\260\346\254\241\346\225\260/1207-\347\213\254\344\270\200\346\227\240\344\272\214\347\232\204\345\207\272\347\216\260\346\254\241\346\225\260.py" @@ -0,0 +1,8 @@ +class Solution(object): + def uniqueOccurrences(self, arr): + """ + :type arr: List[int] + :rtype: bool + """ + d = collections.Counter(arr) + return len(d.values()) == len(set(d.values())) \ No newline at end of file diff --git "a/1213.\344\270\211\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206/1213-\344\270\211\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.py" "b/1213.\344\270\211\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206/1213-\344\270\211\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.py" new file mode 100644 index 0000000..7e4fb9a --- /dev/null +++ "b/1213.\344\270\211\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206/1213-\344\270\211\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204\347\232\204\344\272\244\351\233\206.py" @@ -0,0 +1,18 @@ +class Solution(object): + def arraysIntersection(self, arr1, arr2, arr3): + """ + :type arr1: List[int] + :type arr2: List[int] + :type arr3: List[int] + :rtype: List[int] + """ + res = [] + record = [0 for _ in range(2005)] + for num in arr1 + arr2 + arr3: + record[num] += 1 + + for i in range(len(record)): + if record[i] == 3: + res.append(i) + + return res \ No newline at end of file diff --git "a/1221.\345\210\206\345\211\262\345\271\263\350\241\241\345\255\227\347\254\246\344\270\262/1221-\345\210\206\345\211\262\345\271\263\350\241\241\345\255\227\347\254\246\344\270\262.py" "b/1221.\345\210\206\345\211\262\345\271\263\350\241\241\345\255\227\347\254\246\344\270\262/1221-\345\210\206\345\211\262\345\271\263\350\241\241\345\255\227\347\254\246\344\270\262.py" new file mode 100644 index 0000000..6dcc6a1 --- /dev/null +++ "b/1221.\345\210\206\345\211\262\345\271\263\350\241\241\345\255\227\347\254\246\344\270\262/1221-\345\210\206\345\211\262\345\271\263\350\241\241\345\255\227\347\254\246\344\270\262.py" @@ -0,0 +1,21 @@ +class Solution(object): + def balancedStringSplit(self, s): + """ + :type s: str + :rtype: int + """ + if not s: + return 0 + # print s + l, r = 0, 0 + + for i in range(len(s)): + if s[i] == "R": + r += 1 + else: + l += 1 + # print r, l + if l == r: + return 1 + self.balancedStringSplit(s[i + 1:]) + + return 0 \ No newline at end of file diff --git "a/1232.\347\274\200\347\202\271\346\210\220\347\272\277/1232-\347\274\200\347\202\271\346\210\220\347\272\277.py" "b/1232.\347\274\200\347\202\271\346\210\220\347\272\277/1232-\347\274\200\347\202\271\346\210\220\347\272\277.py" new file mode 100644 index 0000000..0c166b1 --- /dev/null +++ "b/1232.\347\274\200\347\202\271\346\210\220\347\272\277/1232-\347\274\200\347\202\271\346\210\220\347\272\277.py" @@ -0,0 +1,22 @@ +class Solution(object): + def checkStraightLine(self, coordinates): + """ + :type coordinates: List[List[int]] + :rtype: bool + """ + c = sorted(coordinates, key = lambda x:x[0]) + k = None + for i in range(len(c)): + if i: + x0, y0 = c[i - 1][0], c[i - 1][1] + x1, y1 = c[i][0], c[i][1] + + if x0 == x1: + return False + new_k = 1.0 * (y1 - y0) / (x1 - x0) + if k and k != new_k: + return False + k = new_k + + return True + \ No newline at end of file diff --git "a/1243.\346\225\260\347\273\204\345\217\230\346\215\242/1243-\346\225\260\347\273\204\345\217\230\346\215\242.py" "b/1243.\346\225\260\347\273\204\345\217\230\346\215\242/1243-\346\225\260\347\273\204\345\217\230\346\215\242.py" new file mode 100644 index 0000000..3cdc0ae --- /dev/null +++ "b/1243.\346\225\260\347\273\204\345\217\230\346\215\242/1243-\346\225\260\347\273\204\345\217\230\346\215\242.py" @@ -0,0 +1,20 @@ +class Solution(object): + def transformArray(self, arr): + """ + :type arr: List[int] + :rtype: List[int] + """ + flag = 1 + while flag: + flag = 0 + res = [num for num in arr] + for i in range(1, len(arr) - 1): + if arr[i - 1] < arr[i] and arr[i] > arr[i + 1]: + res[i] -= 1 + flag = 1 + elif arr[i - 1] > arr[i] and arr[i] < arr[i + 1]: + res[i] += 1 + flag = 1 + arr = res[:] + return res + \ No newline at end of file diff --git "a/1244.\345\212\233\346\211\243\346\216\222\350\241\214\346\246\234/1244-\345\212\233\346\211\243\346\216\222\350\241\214\346\246\234.py" "b/1244.\345\212\233\346\211\243\346\216\222\350\241\214\346\246\234/1244-\345\212\233\346\211\243\346\216\222\350\241\214\346\246\234.py" new file mode 100644 index 0000000..4cc49f1 --- /dev/null +++ "b/1244.\345\212\233\346\211\243\346\216\222\350\241\214\346\246\234/1244-\345\212\233\346\211\243\346\216\222\350\241\214\346\246\234.py" @@ -0,0 +1,40 @@ +from collections import defaultdict +from heapq import * +class Leaderboard(object): + + def __init__(self): + self.dic = defaultdict(int) + + def addScore(self, playerId, score): + """ + :type playerId: int + :type score: int + :rtype: None + """ + self.dic[playerId] += score + + def top(self, K): + """ + :type K: int + :rtype: int + """ + self.l = [] + heapify(self.l) + for pid, score in self.dic.items(): + if len(self.l) >= K: + if score > self.l[0]: + heappush(self.l, score) + heappop(self.l) + else: + heappush(self.l, score) + + return sum(self.l) + + + def reset(self, playerId): + """ + :type playerId: int + :rtype: None + """ + self.dic[playerId] = 0 + diff --git "a/1245.\346\240\221\347\232\204\347\233\264\345\276\204/1245-\346\240\221\347\232\204\347\233\264\345\276\204.py" "b/1245.\346\240\221\347\232\204\347\233\264\345\276\204/1245-\346\240\221\347\232\204\347\233\264\345\276\204.py" new file mode 100644 index 0000000..dcb279d --- /dev/null +++ "b/1245.\346\240\221\347\232\204\347\233\264\345\276\204/1245-\346\240\221\347\232\204\347\233\264\345\276\204.py" @@ -0,0 +1,32 @@ +from collections import defaultdict +class Solution(object): + def treeDiameter(self, edges): + """ + :type edges: List[List[int]] + :rtype: int + """ + if not edges: + return 0 + + self.neibors = defaultdict(set) + self.res = 0 + + for start, end in edges: # 建树 + self.neibors[start].add(end) + + def getHeight(node): + res = [] + for neibor in self.neibors[node]: + res.append(getHeight(neibor)) + + while len(res) < 2: # 如果孩子少于两个,就给它补空的上去 + res.append(0) + + res = sorted(res) + self.res = max(self.res, sum(res[-2:])) # 取最长的两个子树长度 + return 1 + max(res) + + getHeight(edges[0][0]) + return self.res + + \ No newline at end of file diff --git "a/1247.\344\272\244\346\215\242\345\255\227\347\254\246\344\275\277\345\276\227\345\255\227\347\254\246\344\270\262\347\233\270\345\220\214/1247-\344\272\244\346\215\242\345\255\227\347\254\246\344\275\277\345\276\227\345\255\227\347\254\246\344\270\262\347\233\270\345\220\214.py" "b/1247.\344\272\244\346\215\242\345\255\227\347\254\246\344\275\277\345\276\227\345\255\227\347\254\246\344\270\262\347\233\270\345\220\214/1247-\344\272\244\346\215\242\345\255\227\347\254\246\344\275\277\345\276\227\345\255\227\347\254\246\344\270\262\347\233\270\345\220\214.py" new file mode 100644 index 0000000..2ac2df1 --- /dev/null +++ "b/1247.\344\272\244\346\215\242\345\255\227\347\254\246\344\275\277\345\276\227\345\255\227\347\254\246\344\270\262\347\233\270\345\220\214/1247-\344\272\244\346\215\242\345\255\227\347\254\246\344\275\277\345\276\227\345\255\227\347\254\246\344\270\262\347\233\270\345\220\214.py" @@ -0,0 +1,21 @@ +class Solution(object): + def minimumSwap(self, s1, s2): + """ + :type s1: str + :type s2: str + :rtype: int + """ + s = s1 + s2 + x = s.count("x") + if len(s1) != len(s2) or x % 2 == 1 or (len(s) - x) % 2 == 1: + return -1 + + pair1 = 0 + pair2 = 0 + for i in range(len(s1)): + if s1[i] == "y" and s2[i] == "x": + pair1 += 1 + elif s1[i] == "x" and s2[i] == "y": + pair2 += 1 + + return pair1 // 2 + pair2 // 2 + pair1 % 2 + pair2 % 2 \ No newline at end of file diff --git "a/1248.\347\273\237\350\256\241\343\200\214\344\274\230\347\276\216\345\255\220\346\225\260\347\273\204\343\200\215/1248-\347\273\237\350\256\241\343\200\214\344\274\230\347\276\216\345\255\220\346\225\260\347\273\204\343\200\215.py" "b/1248.\347\273\237\350\256\241\343\200\214\344\274\230\347\276\216\345\255\220\346\225\260\347\273\204\343\200\215/1248-\347\273\237\350\256\241\343\200\214\344\274\230\347\276\216\345\255\220\346\225\260\347\273\204\343\200\215.py" new file mode 100644 index 0000000..0101e1d --- /dev/null +++ "b/1248.\347\273\237\350\256\241\343\200\214\344\274\230\347\276\216\345\255\220\346\225\260\347\273\204\343\200\215/1248-\347\273\237\350\256\241\343\200\214\344\274\230\347\276\216\345\255\220\346\225\260\347\273\204\343\200\215.py" @@ -0,0 +1,36 @@ +class Solution(object): + def numberOfSubarrays(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: int + """ + if not nums: + return 0 + res = 0 + odd = [] + for i, num in enumerate(nums): + if num % 2: + odd.append(i) + + if len(odd) < k: + return 0 + + + for i in range(len(odd)): + if i + k > len(odd): + break + if i: + last = odd[i - 1] + else: + last = -1 + + if i + k < len(odd): + nxt = odd[i + k] + else: + nxt = len(nums) + + left = odd[i] - last + right = nxt - odd[i + k - 1] + res += left * right + return res \ No newline at end of file diff --git "a/1249.\347\247\273\351\231\244\346\227\240\346\225\210\347\232\204\346\213\254\345\217\267/1249-\347\247\273\351\231\244\346\227\240\346\225\210\347\232\204\346\213\254\345\217\267.py" "b/1249.\347\247\273\351\231\244\346\227\240\346\225\210\347\232\204\346\213\254\345\217\267/1249-\347\247\273\351\231\244\346\227\240\346\225\210\347\232\204\346\213\254\345\217\267.py" new file mode 100644 index 0000000..29ef926 --- /dev/null +++ "b/1249.\347\247\273\351\231\244\346\227\240\346\225\210\347\232\204\346\213\254\345\217\267/1249-\347\247\273\351\231\244\346\227\240\346\225\210\347\232\204\346\213\254\345\217\267.py" @@ -0,0 +1,23 @@ +class Solution(object): + def minRemoveToMakeValid(self, s): + """ + :type s: str + :rtype: str + """ + left, right = 0, 0 + stack = [] + remove = set() + for i, ch in enumerate(s): + if ch == "(": + stack.append(i) + elif ch == ")": + if stack: + stack.pop() + else: + remove.add(i) + stack = set(stack) + res = "" + for i, ch in enumerate(s): + if i not in stack and i not in remove: + res += ch + return res \ No newline at end of file diff --git "a/1250.\346\243\200\346\237\245\343\200\214\345\245\275\346\225\260\347\273\204\343\200\215/1250-\346\243\200\346\237\245\343\200\214\345\245\275\346\225\260\347\273\204\343\200\215.py" "b/1250.\346\243\200\346\237\245\343\200\214\345\245\275\346\225\260\347\273\204\343\200\215/1250-\346\243\200\346\237\245\343\200\214\345\245\275\346\225\260\347\273\204\343\200\215.py" new file mode 100644 index 0000000..64a8190 --- /dev/null +++ "b/1250.\346\243\200\346\237\245\343\200\214\345\245\275\346\225\260\347\273\204\343\200\215/1250-\346\243\200\346\237\245\343\200\214\345\245\275\346\225\260\347\273\204\343\200\215.py" @@ -0,0 +1,14 @@ +class Solution(object): + def isGoodArray(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + def gcd(x, y): + while y: + x, y = y, x % y + return x + g = nums[0] + for num in nums: + g = gcd(g, num) + return g == 1 \ No newline at end of file diff --git "a/1252.\345\245\207\346\225\260\345\200\274\345\215\225\345\205\203\346\240\274\347\232\204\346\225\260\347\233\256/1252-\345\245\207\346\225\260\345\200\274\345\215\225\345\205\203\346\240\274\347\232\204\346\225\260\347\233\256.py" "b/1252.\345\245\207\346\225\260\345\200\274\345\215\225\345\205\203\346\240\274\347\232\204\346\225\260\347\233\256/1252-\345\245\207\346\225\260\345\200\274\345\215\225\345\205\203\346\240\274\347\232\204\346\225\260\347\233\256.py" new file mode 100644 index 0000000..be35f2f --- /dev/null +++ "b/1252.\345\245\207\346\225\260\345\200\274\345\215\225\345\205\203\346\240\274\347\232\204\346\225\260\347\233\256/1252-\345\245\207\346\225\260\345\200\274\345\215\225\345\205\203\346\240\274\347\232\204\346\225\260\347\233\256.py" @@ -0,0 +1,22 @@ +class Solution(object): + def oddCells(self, n, m, indices): + """ + :type n: int + :type m: int + :type indices: List[List[int]] + :rtype: int + """ + b = [[0 for _ in range(m)] for _ in range(n)] + for row, col in indices: + for i in range(m): + b[row][i] += 1 + + for j in range(n): + b[j][col] += 1 + + res = 0 + for i in range(n): + for j in range(m): + if b[i][j] % 2: + res += 1 + return res \ No newline at end of file diff --git "a/1254.\347\273\237\350\256\241\345\260\201\351\227\255\345\262\233\345\261\277\347\232\204\346\225\260\347\233\256/1254-\347\273\237\350\256\241\345\260\201\351\227\255\345\262\233\345\261\277\347\232\204\346\225\260\347\233\256.py" "b/1254.\347\273\237\350\256\241\345\260\201\351\227\255\345\262\233\345\261\277\347\232\204\346\225\260\347\233\256/1254-\347\273\237\350\256\241\345\260\201\351\227\255\345\262\233\345\261\277\347\232\204\346\225\260\347\233\256.py" new file mode 100644 index 0000000..4718739 --- /dev/null +++ "b/1254.\347\273\237\350\256\241\345\260\201\351\227\255\345\262\233\345\261\277\347\232\204\346\225\260\347\233\256/1254-\347\273\237\350\256\241\345\260\201\351\227\255\345\262\233\345\261\277\347\232\204\346\225\260\347\233\256.py" @@ -0,0 +1,37 @@ +class Solution(object): + def closedIsland(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + m, n = len(grid), len(grid[0]) + dx = [1, -1, 0, 0] + dy = [0, 0, 1, -1] + def dfs(x0, y0): + if grid[x0][y0] == 0: + grid[x0][y0] = -1 + for k in range(4): + x = x0 + dx[k] + y = y0 + dy[k] + + if 0 < x < m and 0 < y < n and grid[x][y] == 0: + dfs(x, y) + + for j in range(n): + dfs(0, j) + for j in range(n): + dfs(m - 1, j) + for i in range(m): + dfs(i, 0) + for i in range(m): + dfs(i, n - 1) + + res = 0 + for i in range(m): + for j in range(n): + if grid[i][j] == 0: + res += 1 + dfs(i, j) + return res + + \ No newline at end of file diff --git "a/1255.\345\276\227\345\210\206\346\234\200\351\253\230\347\232\204\345\215\225\350\257\215\351\233\206\345\220\210/1255-\345\276\227\345\210\206\346\234\200\351\253\230\347\232\204\345\215\225\350\257\215\351\233\206\345\220\210.py" "b/1255.\345\276\227\345\210\206\346\234\200\351\253\230\347\232\204\345\215\225\350\257\215\351\233\206\345\220\210/1255-\345\276\227\345\210\206\346\234\200\351\253\230\347\232\204\345\215\225\350\257\215\351\233\206\345\220\210.py" new file mode 100644 index 0000000..32f2f05 --- /dev/null +++ "b/1255.\345\276\227\345\210\206\346\234\200\351\253\230\347\232\204\345\215\225\350\257\215\351\233\206\345\220\210/1255-\345\276\227\345\210\206\346\234\200\351\253\230\347\232\204\345\215\225\350\257\215\351\233\206\345\220\210.py" @@ -0,0 +1,50 @@ +class Solution(object): + def maxScoreWords(self, words, letters, score): + """ + :type words: List[str] + :type letters: List[str] + :type score: List[int] + :rtype: int + """ + from collections import defaultdict, Counter + dic = dict() + letter_dic = defaultdict(int) + for i, val in enumerate(score):#构建一个字典 + dic[chr(ord("a") + i)] = val #key是 字母,val是字母对应的分数 + + letter_dic = Counter(letters)#构建另一个字典, key是字母, val是每次字母剩余的个数 + + s = set(letters) + v_words = [] + for word in words:#删掉所有根本不可能被构成的单词 + flag = 0 + for char in word: + if char not in s: + flag = 1 + if flag: # 如果一个单词里存在某个在letters里找不到的字母,则无需考虑这个单词 + continue + v_words.append(word) + self.res = 0 + + def helper(word, letter_dic): + # return True 如果word能用letter_dic里的letter构成,否则返回False + dicc = collections.Counter(word) + for key in dicc: + if dicc[key] > letter_dic[key]: + return False + return True + + def dfs(start, tmp): + self.res = max(self.res, tmp) + if start >= len(v_words): + return + + for i in range(start, len(v_words)):#从start开始找,避免重复 + if helper(v_words[i], letter_dic):#如果当前单词可以被构成 + for char in v_words[i]: #构成它,更新字典 + letter_dic[char] -= 1 + dfs(i + 1, tmp + sum([dic[char] for char in v_words[i]])) #dfs下一层 + for char in v_words[i]: #回溯,复原所有状态 + letter_dic[char] += 1 + dfs(0, 0) + return self.res \ No newline at end of file