LeetCode - # 64 soma mínima do caminho (100 principais)

Adquira o hábito de escrever juntos! Este é o 10º dia da minha participação no "Nuggets Daily New Plan · April Update Challenge", clique para ver os detalhes do evento .

prefácio

Esta pergunta é as 100 perguntas de alta frequência do LeetCode

Nossa comunidade organizará sucessivamente as soluções de problemas de algoritmo Swift de Gu Yi ( Netflix Growth Hacker, autor de "The Way of the iOS Interview", ACE Professional Fitness Coach. ) em uma versão de texto para que todos aprendam e leiam.

Atualizamos o algoritmo LeetCode para 63 edições até agora, e manteremos o tempo e o progresso da atualização ( lançado às 9h de segunda, quarta e sexta-feira ). Haverá uma grande melhoria.

Se você não acumular um pequeno passo, não poderá percorrer mil milhas, se não acumular um pequeno riacho, não poderá fazer um rio. A comunidade Swift acompanha você para seguir em frente. Se você tiver sugestões e comentários, deixe uma mensagem no final do artigo, faremos o possível para atender às suas necessidades.

Nível de dificuldade: médio

1. Descrição

Dada uma m x ngrade grid, encontre um caminho do canto superior esquerdo ao canto inferior direito de modo que a soma dos números no caminho seja a menor.

Descrição: Você só pode mover para baixo ou para a direita um passo de cada vez.

2. Exemplo

Exemplo 1

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。
复制代码

Exemplo 2

输入:grid = [[1,2,3],[4,5,6]]
输出:12
复制代码

Restrições:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 200
  • 0 <= grid[i][j] <= 100

3. Respostas

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]
    }
}
复制代码
  • Ideia principal: Programação dinâmica 2D clássica.
  • Complexidade de tempo: O(mn)
  • Complexidade Espacial: O(mn)

Repositório para a solução do algoritmo: LeetCode-Swift

Clique para ir para a prática LeetCode

sobre nós

Somos mantidos em conjunto por entusiastas do Swift. Compartilharemos o conteúdo técnico centrado no combate ao Swift, SwiftUI e Swift Foundation, além de organizar e coletar excelentes materiais de aprendizado.

Acho que você gosta

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