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 n
grade 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.