LC.63. 不同路徑 II
思路:顯然是動態規劃,不能走的位置即可。
否則狀態轉移一下:。
時間複雜度:
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& a) {
int ans=0;
int n=a.size(),m=a[0].size();
vector<vector<int> >dp(n+1,vector<int>(m+1,0));
if(a[0][0]||a[n-1][m-1]) return 0;
dp[1][1]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(i==1&&j==1) continue;
if(a[i-1][j-1]) dp[i][j]=0;
else dp[i][j]=dp[i][j-1]+dp[i-1][j];
}
return dp[n][m];
}
};
因爲是從上一個狀態轉移過來,考慮滾動數組優化空間。
。
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& a) {
int ans=0;
int n=a.size(),m=a[0].size();
vector<int>dp(m+1,0);
if(a[0][0]||a[n-1][m-1]) return 0;
dp[1]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(i==1&&j==1) continue;
if(a[i-1][j-1]) dp[j]=0;
else dp[j]+=dp[j-1];
}
return dp[m];
}
};