import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cows int整型二维数组
* @return int整型
*/
public int uniquePathsWithObstacles(int[][] cows) {
int[][] dp = new int[cows.length][cows[0].length];
// 初始化dp数组
for (int i = 0; i < cows.length; i++) {
if (cows[i][0] == 0) {
dp[i][0] = 1;
}else{
break;
}
}
for (int i = 0; i < cows[0].length; i++) {
if (cows[0][i] == 0) {
dp[0][i] = 1;
} else{
break;
}
}
for (int i = 1; i < cows.length; i++) {
for (int j = 1; j < cows[0].length; j++) {
if(cows[i][j]==1){
dp[i][j] = 0;
}else{
dp[i][j] = dp[i-1][j]+dp[i][j-1];
}
}
}
return dp[cows.length-1][cows[0].length-1];
}
}
本题知识点分析:
1.动态规划
2.数组遍历
3.数学模拟
本题解题思路分析:
1.dp数组是什么?dp数组代表到底m,n位置有几种解法
2.dp数组推导公式, dp[i][j] = dp[i-1][j]+dp[i][j-1];常规公式,要么是向右走到的,要么是向下走到的。
3.dp数组初始化,初始化第一行和第一列就行,如果遇到0说明可以走,那么dp设置为1,有一种解法,如果遇到了1直接break,因为后面的格子必不可能走,因为不能返回走,比如向上或者向左是不可能的。注意break。
4.确定遍历顺序,从dp[1][1]开始,如果遇到了障碍物,那么设置为0,否则解法就是 dp[i][j] = dp[i-1][j]+dp[i][j-1];也就是求和。
本题使用编程语言: Java
如果您觉得本篇文章对您有帮助,可以点个赞支持一下,感谢~

京公网安备 11010502036488号