Knight Probability In Board
from collections import deque
board = {}
moves = [(-1, 2), (1, 2),
(2, 1), (2, -1),
(1, -2), (-1, -2),
(-2, -1), (-2, 1)]
# Complexity: https://leetcode.com/problems/knight-probability-in-chessboard/solutions/3799005/pythonic-solution-video-explanation-dynamic-programming-top-down-dp/
# How many points are at (x, y) after steps
def dfs(n, steps, x, y):
# Base case
if steps == 0:
return 1
if (x, y, steps) in board:
return board[(x, y, steps)]
res = 0
for m in moves:
tempX = x + m[0]
tempY = y + m[1]
if tempX < 0 or tempX >= n or tempY < 0 or tempY >= n:
continue
res += dfs(n, steps - 1, tempX, tempY)
board[(x, y, steps)] = res
return res
# n steps -> n-1 steps
def knightProbability(n, k, row, column):
total = dfs(n, k, row, column)
# Your logic here
return total / pow(8, k)
def main():
# print(knightProbability(3, 2, 0, 0))
assert knightProbability(3, 2, 0, 0) == 0.0625
assert knightProbability(3, 1, 0, 0) == 0.25
assert knightProbability(1, 0, 0, 0) == 1.0
if __name__ == "__main__":
main()```
Last updated