給定乙個m × n的網格和乙個球。球的起始座標為(i,j),你可以將球移到相鄰的單元格內,或者往上、下、左、右四個方向上移動使球穿過網格邊界。但是,你最多可以移動n次。找出可以將球移出邊界的路徑數量。答案可能非常大,返回 結果 mod 109 + 7 的值。
示例 1:
輸入:m = 2, n = 2, n = 2, i = 0, j = 0
輸出:6
解釋:
示例 2:
輸入:m = 1, n = 3, n = 3, i = 0, j = 1
輸出:12
解釋:
說明:
球一旦出界,就不能再被移動回網格內。
網格的長度和高度在 [1,50] 的範圍內。
n 在 [0,50] 的範圍內。
以(i, j)為起始點,其中dp[k][x][y]表示用了k步,進入(x, y)位置的路徑數,由於dp[k][x][y]只依賴於dp[k-1][x][y],所以我們可以用乙個二維dp陣列來代替,初始化dp[i][j]為1,總共n步,進行n次迴圈,每次都新建乙個mxn大小的臨時陣列t,然後就是對於遍歷到的每個位置,都遍歷其四個相鄰位置,如果相鄰位置越界了,那麼我們用當前位置的dp值更新結果res,因為此時dp值的意義就是從(i,j)到越界位置的路徑數。如果沒有,我們將當前位置的dp值賦給t陣列的對應位置,這樣在遍歷完所有的位置時,將陣列t整個賦值給dp,然後進入下一步的迴圈。
1class
solution ,,,};
6 dp[x][y]=1;
7int res=0;
8for(int k=0;k)20}
21}22 dp=t;23}
24return
res;25}
26 }
Leetcode 576 出界的路徑數
給定乙個 m n 的網格和乙個球。球的起始座標為 i,j 你可以將球移到相鄰的單元格內,或者往上 下 左 右四個方向上移動使球穿過網格邊界。但是,你最多可以移動 n 次。找出可以將球移出邊界的路徑數量。答案可能非常大,返回 結果 mod 109 7 的值。示例 1 輸入 m 2,n 2,n 2,i ...
leetcode576 出界的路徑數
題目 給定乙個 m n 的網格和乙個球。球的起始座標為 i,j 你可以將球移到相鄰的單元格內,或者往上 下 左 右四個方向上移動使球穿過網格邊界。但是,你最多可以移動 n 次。找出可以將球移出邊界的路徑數量。答案可能非常大,返回 結果 mod 10 9 7 的值。一開始看題,以為類似機械人路徑問題,...
leetcode演算法題 出界的路徑數
動態規劃 dp i j k 儲存的是在 i,j 這個點,步數為k的所有路徑數狀態轉移 dp i j len dp i 1 j len 1 dp i j 1 len 1 dp i 1 j len 1 dp i j 1 len 1 表示從上下左右四個點走到 i,j 的路徑數 int findpaths ...