@@ -0,0 +1,1287 @@
+public class LeetCode0576 %7B%0A%0A    private final int MOD = 1000000007;%0A    private int N;%0A    private static int%5B%5D%5B%5D dirs = %7B %7B -1, 0 %7D, %7B 1, 0 %7D, %7B 0, -1 %7D, %7B 0, 1 %7D %7D;%0A%0A    public int findPaths(int m, int n, int N, int i, int j)%0A    %7B%0A%0A        if (m %3C= 0 %7C%7C n %3C= 0 %7C%7C N == 0 %7C%7C i %3C 0 %7C%7C j %3C 0) %7B%0A            return 0;%0A        %7D%0A%0A        this.N = N;%0A%0A        int%5B%5D%5B%5D%5B%5D dp = new int%5Bm%5D%5Bn%5D%5BN + 1%5D;%0A        return DFS(0, i, j, m, n, dp);%0A    %7D%0A%0A    private int DFS(int step, int i, int j, int m, int n, int%5B%5D%5B%5D%5B%5D dp)%0A    %7B%0A%0A        if (i %3C 0 %7C%7C i == m %7C%7C j %3C 0 %7C%7C j == n) %7B%0A            return 1;%0A        %7D%0A%0A        if (step == N) %7B%0A            return 0;%0A        %7D%0A%0A        int remain = N - step;%0A%0A        if (i - remain %3E= 0 && i + remain %3C m && j - remain %3E= 0 && j + remain %3C n) %7B%0A            return 0;%0A        %7D%0A%0A        if (dp%5Bi%5D%5Bj%5D%5Bstep%5D %3E 0) %7B%0A            return dp%5Bi%5D%5Bj%5D%5Bstep%5D;%0A        %7D%0A%0A        for (int k = 0; k %3C dirs.length; k++) %7B%0A            dp%5Bi%5D%5Bj%5D%5Bstep%5D += DFS(step + 1, i + dirs%5Bk%5D%5B0%5D, j + dirs%5Bk%5D%5B1%5D, m, n, dp) %25 MOD;%0A            dp%5Bi%5D%5Bj%5D%5Bstep%5D %25= MOD;%0A        %7D%0A        return dp%5Bi%5D%5Bj%5D%5Bstep%5D;%0A    %7D%0A%0A    public static void main(String%5B%5D args)%0A    %7B%0A        LeetCode0576 solution = new LeetCode0576();%0A        System.out.println(solution.findPaths(2, 2, 2, 0, 0));%0A    %7D%0A%7D

Add LeetCode0576.java