動態規劃
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
(int m,
int n,
int n,
int p,
int q)
for(
int i =
0; i <= n +
1; i++)}
for(
int len =
1; len <= n; len++)}
}int sum=0;
for(
int i=
0;i<=n;i++
) sum=
(sum+dp[p+1]
[q+1
][i])%
1000000007
;return sum;
}
注意,len要放在最外層,每次dp就只記錄恰好走k步的所有路徑數。因為計算len=2時,len=1的dp必須構建完成,所以必須放在外層。而且dp只記錄當前k的所有路徑這個非常重要! 最後計算給定點(p,q)的dp[p][q][1]到dp[p][q][k]即可 Leetcode 576 出界的路勁數
給定乙個m n的網格和乙個球。球的起始座標為 i,j 你可以將球移到相鄰的單元格內,或者往上 下 左 右四個方向上移動使球穿過網格邊界。但是,你最多可以移動n次。找出可以將球移出邊界的路徑數量。答案可能非常大,返回 結果 mod 109 7 的值。示例 1 輸入 m 2,n 2,n 2,i 0,j ...
LeetCode 演算法題
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
Leetcode演算法題
56.合併區間 給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 intervals 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 intervals 1,4 4,5 輸出 1,5 解釋 ...