題目看截圖算法
算法以下數組
package main import ( "fmt" "sort" ) func jz(arr [][]int) int{ // 聲明全部數字的和 sum:=0; // 獲取矩陣行數 此例中的l=5 l := len(arr) for i:=0;i<l;{ // 這裏利用sort.Ints對數組進行由小到大排序 sort.Ints(arr[i]) // 若是i==0 第一行的狀況下 直接將排序後的數組第一個數字的值累加到sum if i==0 { sum+=arr[i][0] } // 這裏就是嘗試往下跳1步 和 2步比較那個的和最小 if i+1<l && i+2<l { sort.Ints(arr[i+1]) sort.Ints(arr[i+2]) temp:=arr[i+1][0]+arr[i+2][0]; //比較後二者的和 和 兩個值的關係。若是和小於二者的任何一個那就選擇跳1步 if arr[i+1][0]>temp && arr[i+2][0]>temp { sum+=arr[i+1][0] i++ }else{ //判斷從當前指針位置,向後數1 和向後數2兩個位置數字的大小,選擇較小的 if arr[i+1][0]>arr[i+2][0] { //此時是向下1步比向下2步的要大,因此選擇第二個 sum+=arr[i+2][0]; i+=2 }else{ sum+=arr[i+1][0]; i++ } } }else if i+1<l{ //臨界值處理,此時的i+2已經越界 不能選擇直接使用最後一個值就能夠了 sort.Ints(arr[i+1]) sum+=arr[i+1][0] break } // 上面的if else if的判斷條件的順序也是解決這個題的關鍵 } return sum } func main() { //矩陣聲明5x5 arr:=[][]int{ {3,0,-2,4,0}, {-1,2,-2,1,4}, {3,1,-2,-3,3}, {2,-4,-3,-3,2,}, {5,2,-2,-3,1}, } fmt.Println(arr) a:=jz(arr) fmt.Println("總數",a) }