minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
O valor de cada célula é determinado pelas células acima e à esquerda, portanto, as células superior e esquerda precisam ser inicializadas primeiro. Como a questão exige que você só possa mover para baixo e para a direita, as células superior e mais à esquerda são inicializadas como 1.
complexidade de tempo: O ( m ∗ n ) O(m*n)O(eu∗e)
Complexidade do espaço: O ( m ∗ n ) O(m*n)O(eu∗e)
// c++
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m, vector(n,0));
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-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
};
A ideia é semelhante à questão anterior, e os obstáculos são adicionados com base na questão anterior. A matriz dp representa o número de caminhos para chegar à célula (i, j), e a posição do obstáculo é 0 na matriz dp. A partir da inicialização da primeira linha e coluna, se um obstáculo aparecer no caminho, as células atrás do obstáculo não serão alcançáveis e os valores correspondentes da matriz dp serão todos 0.
complexidade de tempo: O ( m ∗ n ) O(m*n)O(eu∗e)
Complexidade do espaço: O ( m ∗ n ) O(m*n)O(eu∗e)
// c++
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
vector<vector<int>> dp(obstacleGrid.size(), vector(obstacleGrid[0].size(), 0));
// 标志单元格是否可到达
bool flag = true;
// 初始化第一行
for(int i=0; i<obstacleGrid.size(); i++){
if(obstacleGrid[i][0] == 1) {
// 可以直接break
flag = false;
}
if(flag) dp[i][0] = 1;
else dp[i][0] = 0;
}
// 标志单元格是否可到达
flag = true;
// 初始化第一列
for(int j=0; j<obstacleGrid[0].size(); j++){
if(obstacleGrid[0][j] == 1) {
// 可以直接break
flag = false;
}
if(flag) dp[0][j] = 1;
else dp[0][j] = 0;
}
// 计算dp数组
for(int i=1; i<obstacleGrid.size(); i++){
for(int j=1; j<obstacleGrid[0].size(); j++){
if(obstacleGrid[i][j]==1) continue;
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[obstacleGrid.size()-1][obstacleGrid[0].size()-1];
}
};