Leetcode-63 不同路徑Ⅱ

DFS(超時)

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        return dfs(obstacleGrid,0,0);
    }
    int dfs(vector<vector<int>>& obstacleGrid,int x,int y)
    {
        if(x==obstacleGrid.size()-1&&y==obstacleGrid[0].size()-1&&obstacleGrid[x][y]==0)
            return 1;
        if(x>=obstacleGrid.size()||y>=obstacleGrid[0].size()||obstacleGrid[x][y]==1)
            return 0;
        return dfs(obstacleGrid,x+1,y)+dfs(obstacleGrid,x,y+1);
    }
};

DP

對於一個點看左側點和上方點有幾條路徑可以到達。
開一個比obstacleGrid大一圈的數組處理邊界。
dp[0][1]=1是因爲默認可以進入obstacleGrid[0][0]點,即對應dp[1][1]

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m=obstacleGrid.size();
        int n=obstacleGrid[0].size();
        vector<vector<int>> dp(m+1,vector<int>(n+1,0));
        dp[0][1]=1;
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(obstacleGrid[i-1][j-1]==0)
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        }
        return dp[m][n];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章