[LeetCode]576. Out of Boundary Paths
阿新 • • 發佈:2019-02-09
一個球在m * n的格子內,問多少種路徑可以將它移出格子,最後的結果取模100000007
DP,時間複雜度O(m * n * step),dp[i][j]表示位置(i, j)的當前路徑種數,內層迴圈每次初始化一個新的二維陣列,用來記錄當次遍歷結果,遍歷完之後賦值給cnt
public class Solution { public int findPaths(int m, int n, int N, int a, int b) { if (N <= 0) { return 0; } int[][] cnt = new int[m][n]; int res = 0; int mod = 1000000007; int[][] dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; cnt[a][b] = 1; for (int i = 0; i < N; i++) { int[][] temp = new int[m][n]; for (int j = 0; j < m; j++) { for (int k = 0; k < n; k++) { for (int[] dir : dirs) { int nm = j + dir[0]; int nn = k + dir[1]; if (nm < 0 || nn < 0 || nm >= m || nn >= n) { // 如果下一位置翻出去了,就只與前一次移動結果相關 res = (res + cnt[j][k]) % mod; } else { temp[nm][nn] = (temp[nm][nn] + cnt[j][k]) % mod; } } } } cnt = temp; } return res; } }