编译错误:非常数数组绑定(动态编程)

问题描述:

我试图解决使用golang和下面的动态编程的最小路径和问题是我的程序显示编译错误。编译错误:非常数数组绑定(动态编程)

enter code here 
func minPathSum(grid [][]int) int { 
    var dp[m+1][n+1] int 
    dp[0][0] = grid[0][0] 

    //for column initialization 
    for i := 0; i <= m; i++ { 
     dp[i][0] = dp[i-1][0] + grid[i][0] 
    } 

    //for row initialization 
    for j := 0; j <= n; j++ { 
     dp[0][j] = dp[0][j-1] + grid[0][j] 
    } 
    for i := 0; i <= m; i++ { 
     for j := 0; j <= n; j++ { 
      dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + grid[i][j] 
     } 
    } 
    return dp[m][n] 
} 
+0

可以请包括控制台说,在错误的东西。 – 2017-06-14 17:33:03

+4

你不能在变量中使用'var dp [m] [n] int',如果你需要一个动态矩阵你必须使用切片或者用常量值定义'dp' – Motakjuq

由于@Motakjuq在评论中提到:你不能定义一个动态数组,这两个方面必须是一个数组常量,但片会帮助你。

使用这样的事情:

dp := make([][]int, m) 
for i := range dp { 
    dp[i] = make([]int, n) 
}