for i := 0; i < step; i++ { for r, dic := range sumDic[i] { for c, sum := range dic { right, down := nextStep([]int{r, c}, rowLen, columnLen) if right != nil { checkSum(i+1, sum, right, grid, sumDic) } if down != nil { checkSum(i+1, sum, down, grid, sumDic) } } } } return sumDic[step - 1][rowLen - 1][columnLen -1] }
找到下一步的坐标
funcnextStep(location []int, rowLen, columnLen int)(right, down []int) { down = nil if location[0] < rowLen-1 { down = []int{location[0] + 1, location[1]} } right = nil if location[1] < columnLen-1 { right = []int{location[0], location[1] + 1} } return }
判断这个点的 sum 是否计算过,若果此次 sum 比之前小就替换掉节点的 sum 即只记录 minSum