一個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] }