1. 程式人生 > >leetcode 576. Out of Boundary Paths

leetcode 576. Out of Boundary Paths

long pro 圖像 經典的 path 時間 。。 數組元素 con

https://leetcode.com/problems/out-of-boundary-paths/#/description

題意大概就是在一個m*n的網格中,在坐標為[i,j]的網格上放一個物體,在規定時間N(t<=N)中,有多少種方法把物體移動出去。物體只能上下左右移動,一次移動一格,移動一次為一個單位時間。

求總的個數,並且每個N都是來自四個方向的N-1之和。很明顯用dp做的。還是比較經典的一個dp題把。。

 1 class Solution {
 2 public:
 3     int findPaths(int m, int n, int N, int i, int j) {
 4
int dp[51][50][50]; 5 for(int Ni=0;Ni<=N;Ni++) 6 for(int mi=0;mi<m;mi++) 7 for(int ni=0;ni<n;ni++){ 8 if(!Ni) {dp[Ni][mi][ni]==0; continue;} 9 dp[Ni][mi][ni]=((long long) (!mi?1:dp[Ni-1][mi-1][ni])+(mi==m-1?1:dp[Ni-1][mi+1
][ni])+ 10 (!ni?1:dp[Ni-1][mi][ni-1])+(ni==n-1?1:dp[Ni-1][mi][ni+1]))%1000000007; 11 } 12 return dp[N][i][j]; 13 } 14 };

要註意的是來自邊界外面的個數全都為1,結合圖像看一下就明白了。

有一個地方比較有意思,就是我看Sloution的答案,他的Sloution中沒有初始Ni==0的情況,我想這樣不是不能直接用嘛,因為這時候數組元素不是任意值嘛。。後來我實驗了一下。。

 int dp[51][50][50]={};

原來這樣可以直接初始化為0。。

學到了學到了。。比較特別。。

leetcode 576. Out of Boundary Paths