【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题意:
给定一个二维矩阵,其中0代表这个位置可以走,1代表这个位置不能走,还是从(1,1)走到(n,m),问有多少种走法
思路:
dp[i][j]代表走到(i,j)有多少种走法
由于(i,j)只能从(i-1,j)与(i,j-1)走到,所以状态转移方程为:
dp[i][j]=dp[i-1][j]+dp[i][j-1];
特定的,对于此格为1的情况,因为这一个走不到,所以此时dp[i][j]=0
class Solution
{
public:
int uniquePathsWithObstacles(vector<vector<int> >& a)
{
int i,j;
int n = a.size(),m = a[0].size();
vector<vector<int> > dp;
dp.resize(n+1);
for(i = 0; i<=n; i++)
dp[i].resize(m+1);
dp[0][0] = !a[0][0];
for(i = 0; i<n; i++)
{
for(j = 0; j<m; j++)
{
if(i==0&&j==0) continue;
if(a[i][j]==1)
{
dp[i][j] = 0;
continue;
}
if(i == 0)
{
dp[i][j]=dp[i][j-1];
continue;
}
if(j == 0)
{
dp[i][j]=dp[i-1][j];
continue;
}
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
return dp[n-1][m-1];
}
};