继续leetcode刷题生涯
这里记录的都是笔者觉得有点意思的做法
参考了好几位大佬的题解,感谢各位大佬
class Solution:
def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
if not s and not t:
return True
if not s or not t:
return False
return self.isSameTree(s, t) or self.isSubtree(s.left, t) or self.isSubtree(s.right, t)
def isSameTree(self, s, t):
if not s and not t:
return True
if not s or not t:
return False
return s.val == t.val and self.isSameTree(s.left, t.left) and self.isSameTree(s.right, t.right)
class Solution:
def distributeCandies(self, candies: List[int]) -> int:
return len(set(candies)) if len(set(candies))<len(candies)//2 else len(candies)//2
# dp
class Solution:
def findPaths(self, m: int, n: int, N: int, i: int, j: int) -> int:
result=[]
dp=[[[0]*(n+2) for a in range(m+2)] for b in range(N+1)]
for c in range(m+2):
for d in range(n+2):
if c==0 or c==m+1 or d==0 or d==n+1:
dp[0][c][d]+=1
for x in range(1,N+1):
for y in range(1,m+1):
for z in range(1,n+1):
dp[x][y][z]=dp[x-1][y-1][z]+dp[x-1][y+1][z]+dp[x-1][y][z-1]+dp[x-1][y][z+1]#状态方程
result.append(dp[x][i+1][j+1])
return sum(result)%1000000007
# 记忆化
from functools import lru_cache
class Solution:
@lru_cache(None)
def findPaths(self, m: int, n: int, N: int, i: int, j: int) -> int:
if i < 0 or i >= m or j < 0 or j >= n: return 1
if not N: return 0
return sum(self.findPaths(m, n, N - 1, i + dx, j + dy) for dx, dy in ((0, 1), (0, -1), (1, 0), (-1, 0))) % (10 ** 9 + 7)