64.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. /* func minInt(x, y int) int {
  6. if x < y {
  7. return x
  8. }
  9. return y
  10. } */
  11. func minPathSumOld(grid [][]int) int {
  12. m, n := len(grid), len(grid[0])
  13. minGrid := make([][]int, m)
  14. // 1st col
  15. for i, sum := 0, 0; i < m; i++ {
  16. minGrid[i] = make([]int, n)
  17. sum += grid[i][0]
  18. minGrid[i][0] = sum
  19. }
  20. // 1st row
  21. for i, sum := 1, grid[0][0]; i < n; i++ {
  22. sum += grid[0][i]
  23. minGrid[0][i] = sum
  24. }
  25. for i := 1; i < m; i++ {
  26. for j := 1; j < n; j++ {
  27. minGrid[i][j] = grid[i][j] + minInt(minGrid[i-1][j], minGrid[i][j-1])
  28. }
  29. }
  30. fmt.Println(minGrid)
  31. return minGrid[m-1][n-1]
  32. }
  33. func minPathSum(grid [][]int) int {
  34. // no need to create a new minGrid!
  35. m, n := len(grid), len(grid[0])
  36. // 1st col
  37. for i := 1; i < m; i++ {
  38. grid[i][0] += grid[i-1][0]
  39. }
  40. // 1st row
  41. for i := 1; i < n; i++ {
  42. grid[0][i] += grid[0][i-1]
  43. }
  44. for i := 1; i < m; i++ {
  45. for j := 1; j < n; j++ {
  46. grid[i][j] += minInt(grid[i-1][j], grid[i][j-1])
  47. }
  48. }
  49. return grid[m-1][n-1]
  50. }
  51. /* func main() {
  52. g1 := [][]int{
  53. {1, 3, 1},
  54. {1, 5, 1},
  55. {4, 2, 1},
  56. }
  57. fmt.Println(minPathSum(g1))
  58. } */