¡Acostúmbrate a escribir juntos! Este es el décimo día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .
prefacio
Esta pregunta es una de las 100 preguntas más frecuentes de LeetCode
Nuestra comunidad organizará sucesivamente las soluciones de problemas del algoritmo Swift de Gu Yi ( Netflix Growth Hacker, autor de "The Way of the iOS Interview", ACE Professional Fitness Coach. ) en una versión de texto para que todos puedan aprender y leer.
Hemos actualizado el algoritmo LeetCode para 63 problemas hasta el momento, y mantendremos el tiempo y el progreso de la actualización ( publicado a las 9:00 a. m. los lunes, miércoles y viernes ). Habrá una gran mejora.
Si no acumulas un pequeño paso, no puedes recorrer mil millas, si no acumulas un pequeño arroyo, no puedes hacer un río, la comunidad Swift te acompaña para seguir adelante. Si tiene sugerencias y comentarios, deje un mensaje al final del artículo, haremos todo lo posible para satisfacer sus necesidades.
Nivel de dificultad: medio
1. Descripción
Dada una m x n
cuadrícula grid
, encuentre un camino desde la esquina superior izquierda hasta la esquina inferior derecha tal que la suma de los números en el camino sea la más pequeña.
Descripción: solo puede moverse hacia abajo o hacia la derecha un paso a la vez.
2. Ejemplo
Ejemplo 1
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。
复制代码
Ejemplo 2
输入:grid = [[1,2,3],[4,5,6]]
输出:12
复制代码
Restricciones:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 100
3. Respuestas
class MinimumPathSum {
func minPathSum(_ grid: [[Int]]) -> Int {
guard grid.count != 0 && grid[0].count != 0 else{
return 0
}
let m = grid.count, n = grid[0].count
var dp = Array(repeating: Array(repeating: 0, count: n), count: m)
for i in 0..<m {
for j in 0..<n {
if i == 0 && j == 0{
dp[i][j] = grid[i][j]
} else if i == 0 {
dp[i][j] = dp[i][j - 1] + grid[i][j]
} else if j == 0 {
dp[i][j] = dp[i - 1][j] + grid[i][j]
} else {
dp[i][j] = min(dp[i][j - 1], dp[i - 1][j]) + grid[i][j]
}
}
}
return dp[m - 1][n - 1]
}
}
复制代码
- Idea principal: Programación dinámica 2D clásica.
- Complejidad de tiempo: O(mn)
- Complejidad espacial: O(mn)
Repositorio para la solución del algoritmo: LeetCode-Swift
Haga clic para ir a la práctica de LeetCode
sobre nosotros
Somos mantenidos conjuntamente por entusiastas de Swift. Compartiremos el contenido técnico centrado en Swift combat, SwiftUI y Swift Foundation, y también organizaremos y recopilaremos excelentes materiales de aprendizaje.