LeetCode - #64 Suma de ruta mínima (Top 100)

¡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 ncuadrí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.

Supongo que te gusta

Origin juejin.im/post/7085923212579569678
Recomendado
Clasificación