Dynamic Programming21 sections · 916 units
Open in Course

Out of Boundary - Implementation

The code

Here's the memoized solution:

function findPaths
    MOD := 10^9 + 7
    dp := 3D (three-dimensional) array [m][n][maxMove + 1], all -1
    return solve
function solve(r, c, k, m, n, MOD)
    if r < 0 or r >= m or c < 0 or c >= n then
        return 1
    if k = 0 then
        return 0
    if dp[r][c][k]  -1 then
        return dp[r][c][k]
    result := 0
    result := (result + solve(r - 1, c, k - 1, m, n, MOD)) % MOD
    result := (result + solve(r + 1, c, k - 1, m, n, MOD)) % MOD
    result := (result + solve(r, c - 1, k - 1, m, n, MOD)) % MOD
    result := (result + solve(r, c + 1, k - 1, m, n, MOD)) % MOD
    dp[r][c][k] := result
    return result

Leaving the grid returns 11. Staying with no moves returns 00. Sum over 44 directions, modulo 109+710^9 + 7.

Time: O(mnk)O(m \cdot n \cdot k). Space: O(mnk)O(m \cdot n \cdot k) for the 33D memoization table.