leetcode 576. Out of Boundary Paths
阿新 • • 發佈:2017-05-07
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) { 4int 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