62.不同路径
int uniquePaths(int m, int n) {
int dp[m][n];//变量作为size时不能进行初始化
//第一行,第一列都要初始化
for(int i=0;i<m;i++) dp[i][0]=1;
for(int j=0;j<n;j++) dp[0][j]=1;
//有两个路径到达某一点
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
dp[i][j]=dp[i][j-1]+dp[i-1][j];
}
}
return dp[m-1][n-1];//不是返回dp[m][n]
}
63. 不同路径 II
int uniquePathsWithObstacles(int** obstacleGrid, int obstacleGridSize, int* obstacleGridColSize) {
int dp[obstacleGridSize][(*obstacleGridColSize)];
for(int i=0;i<obstacleGridSize;i++){//全部初始化为0
for(int j=0;j<(*obstacleGridColSize);j++){
dp[i][j]=0;
}
}
for(int i=0;i<obstacleGridSize&&obstacleGrid[i][0]==0;i++){
//第一行/第一列障碍物及以后的行/列均有0种路径
//&&右侧判断条件在for那行会截断遍历,放在for的大括号里不会
dp[i][0]=1;
}
for(int j=0;j<(*obstacleGridColSize)&&obstacleGrid[0][j]==0;j++){
dp[0][j]=1;
}
for(int i=1;i<obstacleGridSize;i++){
for(int j=1;j<(*obstacleGridColSize);j++){
if(obstacleGrid[i][j]==0) //&&右侧判断条件在for那行会截断遍历,放在for的大括号里不会
//若有障碍则该点有0条路径
//障碍在终点或起点→0种路径
dp[i][j]=dp[i][j-1]+dp[i-1][j];
}
}
return dp[obstacleGridSize-1][(*obstacleGridColSize)-1];
}