leetcode演算法題 出界的路徑數

2021-10-05 01:15:54 字數 891 閱讀 6083

動態規劃

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 解釋 ...