leetcode63 不同路径

这种题目大多不用搜索,首选简单数学方法和动态规划。这里用的是动态规划如果网络只有两行的话可以用数学方法。简单的dp问题,题目求什么dp数组设什么就好。转移条件也很简单。注意判断边界情况,数组设置成long long不然会爆int。

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        long long dp[105][105];
        if(obstacleGrid.empty()||obstacleGrid[0].empty())
        {
            return 0;
        }
        if(obstacleGrid[0][0]==1)
            return 0;
        int row=obstacleGrid.size();
        int col=obstacleGrid[0].size();
        int i;
        dp[0][0]=1;
        for(i=0;i<row;i++)
        {
            if(obstacleGrid[i][0]!=0)
            {
                for(;i<row;i++)
                {
                    dp[i][0]=0;
                }
                break;
            }
            else
                dp[i][0]=1;
        }
        for(i=0;i<col;i++)
        {
            if(obstacleGrid[0][i]==1)
            {
                for(;i<col;i++)
                    dp[0][i]=0;
                break;
            }
            else
                dp[0][i]=1;
        }
        int j;
        for(i=1;i<row;i++)
        {
            for(j=1;j<col;j++)
            {
                if(obstacleGrid[i][j]==1)
                    dp[i][j]=0;
                else
                    dp[i][j]=dp[i][j-1]+dp[i-1][j];
            }
        }
        return dp[row-1][col-1];
    }
};

猜你喜欢

转载自www.cnblogs.com/legendcong/p/12535438.html