题目看截图
算法如下
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)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。