Leetcode Contest 410 Solutions
Aug 14, 2024·
·
2 min read
Haihao Sun
class Solution:
def finalPositionOfSnake(self, n: int, commands: List[str]) -> int:
grid = [[0 for _ in range(n)] for _ in range(n)]
idx = 0
for i in range(n):
for j in range(n):
grid[i][j] = idx;
idx += 1;
r = 0
c = 0
for i in range(len(commands)):
cm = commands[i]
if cm == "UP":
r -= 1
elif cm == "RIGHT":
c += 1
elif cm == "DOWN":
r += 1
else:
c -= 1
return grid[r][c]
class Solution:
def countGoodNodes(self, edges: List[List[int]]) -> int:
n = len(edges) + 1
graph = [[] for _ in range(n)]
for [a, b] in edges:
graph[a].append(b)
graph[b].append(a)
ret = 0
def dfs(node, parent):
nonlocal ret
cnts = []
valids= []
for nxt in graph[node]:
if nxt == parent:
continue
valid, cnt = dfs(nxt, node)
valids.append(valid)
cnts.append(cnt)
if len(set(cnts)) <= 1:
ret += 1
return True, 1 + sum(cnts)
else:
return False, 1 + sum(cnts)
dfs(0, -1)
return ret
class Solution:
def countOfPairs(self, nums: List[int]) -> int:
MOD = int(1e9 + 7)
n = len(nums)
m = max(nums) + 1
dp = [[0 for _ in range(m + 1)] for _ in range(n + 1)]
for i in range(n):
for j in range(m + 1):
if i == 0:
if nums[i] - j >= 0:
dp[i][j] = 1
else:
dp[i][j] = 0
else:
for k in range(j + 1):
if nums[i - 1] - k >= nums[i] - j and nums[i] - j >= 0:
dp[i][j] = (dp[i][j] + dp[i - 1][k]) % MOD
return sum(dp[n - 1]) % MOD
class Solution:
def countOfPairs(self, nums: List[int]) -> int:
MOD = int(1e9 + 7)
n = len(nums)
m = max(nums) + 1
dp = [[0 for _ in range(m + 1)] for _ in range(n + 1)]
p1 = [0 for _ in range(m + 2)]
p2 = [0 for _ in range(m + 2)]
for i in range(n):
for j in range(m + 1):
if i == 0:
if nums[i] - j >= 0:
dp[i][j] = 1
else:
dp[i][j] = 0
else:
k = nums[i - 1] - nums[i] + j
if nums[i] - j >= 0:
if k >= m:
k = m
if k < 0:
dp[i][j] = 0
continue
if k >= j:
k = j
dp[i][j] = p1[k]
else:
dp[i][j] = 0
if j != 0:
p2[j] = (p2[j - 1] + dp[i][j]) % MOD
else:
p2[j] = (0 + dp[i][j]) % MOD
p1 = list(p2)
p2 = [0 for _ in range(m + 2)]
return sum(dp[n - 1]) % MOD