高级农民
- 积分
- 1275
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-7-6
- 最后登录
- 1970-1-1
|
Day 3
刚才写了三道题不知道为啥没有了?
https://leetcode.com/problems/wildcard-matching/
这道题的重点是找到星号开始的地方
- class Solution(object):
- def isMatch(self, s, p):
- """
- :type s: str
- :type p: str
- :rtype: bool
- """
- si = pi = 0
- stari = starsi = -1
- while si<len(s):
- if pi < len(p) and p[pi] in {'?', s[si]}:
- si+=1
- pi+=1
- elif pi < len(p) and p[pi] == '*':
- stari = pi
- starsi = si
- pi += 1
- elif stari > -1:
- pi = stari+1
- si = starsi+1
- starsi = si
- else:
- return False
- return all(x=='*' for x in p[pi:])
-
复制代码
https://leetcode.com/problems/permutations/
一秒做完
- class Solution(object):
- def permute(self, nums):
- """
- :type nums: List[int]
- :rtype: List[List[int]]
- """
- res = []
- visited = set()
- def dfs(cur):
- if len(cur) == len(nums):
- res.append(list(cur))
- for n in nums:
- if n in visited:
- continue
- visited.add(n)
- dfs(cur+[n])
- visited.remove(n)
- dfs([])
- return res
复制代码
https://leetcode.com/problems/de ... rds-data-structure/
这道题用Trie
- class TrieNode:
- def __init__(self):
- self.children = collections.defaultdict(TrieNode)
- self.isWord = False
- class WordDictionary:
- def __init__(self):
- """
- Initialize your data structure here.
- """
- self.root = TrieNode()
-
- def addWord(self, word: str) -> None:
- node = self.root
- for char in word:
- node = node.children[char]
- node.isWord = True
-
- def searchWord(self, word, node, index):
- if index == len(word):
- return node.isWord
- if word[index] == '.':
- for c in node.children.values():
- if c and self.searchWord(word, c, index+1):
- return True
- return False
- else:
- return node.children[word[index]] and self.searchWord(word, node.children[word[index]], index+1)
- def search(self, word: str) -> bool:
- return self.searchWord(word, self.root, 0)
复制代码
https://leetcode.com/problems/n-queens/
这题其实不难,主要是把valid情况写清楚,然后用dfs
- class Solution:
-
- def isValid(self, row, col):
- for k in range(row):
- if self.queens[k][col] == 'Q':
- return False
- for k in range(col):
- if self.queens[row][k] == 'Q':
- return False
-
- for i, j in zip(range(row-1, -1, -1), range(col-1, -1, -1)):
- if self.queens[i][j] == 'Q':
- return False
- for i, j in zip(range(row-1, -1, -1), range(col+1, self.n)):
- if self.queens[i][j] == 'Q':
- return False
- return True
-
- def dfs(self, row):
- if row == self.n:
- self.res.append(self.format_queens())
- for col in range(self.n):
- if self.isValid(row, col):
- self.queens[row][col] = 'Q'
- self.dfs(row+1)
- self.queens[row][col] = '.'
-
- def format_queens(self):
- res = []
- for row in self.queens:
- res.append(''.join(row))
- return res
-
- def solveNQueens(self, n: int) -> List[List[str]]:
- self.n = n
- self.queens = [['.' for _ in range(n)] for _ in range(n)]
- self.res = []
- self.dfs(0)
- return self.res
-
-
复制代码
好了 backtracking绿色frequency部分写完了。可以出去玩啦。开森。 |
|