Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
class Solution {
public int uniquePaths(int m, int n) {
int[][]dp = new int[m+1][n+1];
dp[0][0] = 0;
dp[0][1] = 1;
dp[1][0] = 1;
for(int i=1; i<m; i++) {
for(int j=1; j<n; j++) {
dp[i][j] = dp[i-1][j] + dp[i-1][j-1];
}
}
return dp[m][n];
}
}
/*
自己解题的时候思考过程
n-1 : 往右走的次数
m-1 : 往下走的次数
dp[i][j]到当前的位置,有几种方法
dp[0][0] 0
dp[0][1] 1
dp[1][0] 1
dp[1][1] 2
dp[i][j] 的前一个状态是,(1)他的左边dp[i-1][j],或者(1)dp[i-1][j-1]
dp[i][j] = dp[i-1][j] + dp[i-1][j-1];
*/
Error de inicialización. La inicialización aquí debe cubrir toda la columna izquierda y la fila horizontal.
// 第0列,dp[i][0] 表示到当前的位置,有几种方法,这一列都是只有一种
for (int i = 0; i < m; i++) {
dp[i][0] = 1;
}
// 第0行,dp[0][i] 表示到当前的位置,有几种方法,这一行都是只有一种
for (int i = 0; i < n; i++) {
dp[0][i] = 1;
}
Diagrama de almacenamiento de matriz bidimensional JAVA:
proceso de pensamiento
(1) Determine el significado de la matriz dp y los subíndices:到当前的位置[i][j],有几种方法 dp[i][j]
(2) Determinar la fórmula de recursividaddp[i][j] = dp[i-1][j] + dp[i][j-1];
(3) Cómo inicializar la matriz dp本题就栽在这一步了,其实是要for循环 初始化一列和一排的
(4) Determine el orden transversal de adelante hacia atrás.
(5) Utilice un ejemplo para derivar la matriz dp
(6) Imprimir matriz dp
C.A
class Solution {
public int uniquePaths(int m, int n) {
int[][]dp = new int[m][n];
for(int i=0; i<m; i++) {
dp[i][0] = 1;
}
for(int i=0; i<n; i++) {
dp[0][i] = 1;
}
for(int i=1; i<m; i++) {
for(int j=1; j<n; j++) {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
}
Encuentra la longitud de una matriz bidimensional
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
Derive la fórmula dp[i][j] = dp[i-1][j] + dp[i][j-1];
Si [i][j] tuviera un obstáculo, habría sido imposible caminar.
if(obs[i][j] == 0) dp[i][j] = dp[i-1][j] + dp[i][j-1];
inicialización
Si hay un obstáculo en la primera fila o columna, todos los siguientes se inicializarán a 0.
Error
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 3
at line 22, Solution.uniquePathsWithObstacles
at line 56, __DriverSolution__.__helper__
at line 86, __Driver__.main
Porque dp comenzó desde [1][1]
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
int[][]dp = new int[m][n];
if(obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1) {
return 0;
}
//初始化
for(int i=0; i<m && obstacleGrid[i][0]!=1; i++) {
dp[i][0] = 1;
//中途如果有obstacleGrid[i][0]!=0,那就暂停循环,Java初始化都赋了0
}
//初始化
for(int j=0; j<n && obstacleGrid[0][j]!=1; j++) {
dp[0][j] = 1;
}
for(int i=1; i<m; i++) { //这里写了0是错误的
for(int j=1; j<n; j++) {
dp[i][j] = (obstacleGrid[i][j]==0?(dp[i][j-1]+dp[i-1][j]):0);
}
}
return dp[m-1][n-1];
}
}
//我的思考
// obstacleGrid[i][j] = 1 此处有障碍物,走不了
// obstacleGrid[i][j] = 0
// dp[i][j] = dp[i-1][j] + dp[i][j-1]
// 如果 obstacleGrid[i-1][j] = 1,前一种状态就不能是dp[i-1][j],dp[i][j] = dp[i][j-1]
// 如果 obstacleGrid[i][j-1] = 1,前一种状态就不能是dp[i][j-1],dp[i][j] = dp[i-1][j]
Ni idea
Centrarse en ideas para la resolución de problemas
① Divídalo en los mismos números tanto como sea posible. Cuando todos los números divididos sean iguales, el producto será el mayor. ② El número de división óptimo es 3.
class Solution {
public int integerBreak(int n) {
if(n <= 3) return n - 1;
int a = n / 3, b = n % 3;
if(b == 0) return (int)Math.pow(3, a);
if(b == 1) return (int)Math.pow(3, a - 1) * 4;
return (int)Math.pow(3, a) * 2;
}
}