一个n*n的二维数字数组,从左上角出发,只能向右或向左移动,目标点是右下角
求一个最短路径和
Demo代码如下:
package go_package import ( "fmt" "testing" ) func TestShortestPath(t *testing.T) { grib := [][]int{ {1,2,3}, {7,8,5}, {4,2,1}} result := handleshorTestLength(grib) fmt.Println("结果是:", result) } /** * 将累加结果写入对应的位置记录 */ func handleshorTestLength(grib [][]int) int{ length := len(grib) for i:=0; i<length; i++ { for j:=0; j<length; j++ { // 比较上面的点和左边的点值的大小,来决定当前点的更新值 // 考虑边界情况 if i == 0 { // 第一行 if j > 0 { grib[i][j] = grib[i][j] + grib[i][j-1] } continue } if j == 0 { // 第一列 没有左边的值 if i > 0 { grib[i][j] = grib[i][j] + grib[i-1][j] } continue } // 其余的点既有上边的,也有左边的;可以正常进行判断 up := grib[i][j-1] left := grib[i-1][j] if up > left { grib[i][j] = grib[i][j] + left }else { grib[i][j] = grib[i][j] + up } } } // 返回[length-1][length-1]位置的值 return grib[length-1][length-1] }