题目:原题链接(中等)
标签:动态规划
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
Ans 1 (Python) | O ( N 2 × K ) | O ( N 2 ) | 168ms (73.86%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
class Solution:
def knightProbability(self, n: int, k: int, r: int, c: int) -> float:
def get_next(x1, y1):
res = []
for (x2, y2) in [(x1 - 2, y1 - 1), (x1 - 2, y1 + 1), (x1 - 1, y1 + 2), (x1 + 1, y1 + 2),
(x1 + 2, y1 + 1), (x1 + 2, y1 - 1), (x1 + 1, y1 - 2), (x1 - 1, y1 - 2)]:
if 0 <= x2 < n and 0 <= y2 < n:
res.append((x2, y2))
return res
now = [[0] * n for _ in range(n)]
now[r][c] = 1
for _ in range(k):
next = [[0] * n for _ in range(n)]
for i1 in range(n):
for j1 in range(n):
if now[i1][j1]:
for (i2, j2) in get_next(i1, j1):
next[i2][j2] += now[i1][j1]
now = next
return sum(sum(row) for row in now) / 8 ** k