LC.63. 不同路徑 II

LC.63. 不同路徑 II

傳送門

思路:顯然是動態規劃,不能走的位置dp[i][j]=0dp[i][j]=0即可。

否則狀態轉移一下:dp[i][j]=dp[i1][j]+dp[i][j1]dp[i][j]=dp[i-1][j]+dp[i][j-1]

時間複雜度:O(nm)O(nm)

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];
    }
};

因爲是從上一個狀態轉移過來,考慮滾動數組優化空間。

dp[j]+=dp[j]+dp[j1]dp[j]+=dp[j]+dp[j-1]

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];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章