递归之求二维数组的最短路径给定一个整数和一个数组任意选择数组中的数累加能否得到该整数

Posted icekx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归之求二维数组的最短路径给定一个整数和一个数组任意选择数组中的数累加能否得到该整数相关的知识,希望对你有一定的参考价值。

1.给你一个二维数组,二维数组中的每个数都是正数,要求从左上角走到右下角,每一步只能向右或向下沿途经过的数字要累加起来,返回最小路径和

 1 # i,j确定则返回值固定
 2 def walk(matrix, i, j):
 3     if i == len(matrix)-1 and j == len(matrix[0])-1:   # 到达右下角,返回节点值
 4         return matrix[i][j]
 5     if i == len(matrix)-1:                                 # 到达最后一行
 6         return matrix[i][j] + walk(matrix, i, j+1)        # 只能向右走
 7     if j == len(matrix[0])-1:                             # 到达最后一列
 8         return matrix[i][j] + walk(matrix, i+1, j)        # 只能向下走
 9     right = matrix[i][j] + walk(matrix, i, j+1)     # 右边位置到右下角的最短路径和
10     down = matrix[i][j] + walk(matrix, i+1, j)      # 下边位置到右下角的最短路径和
11     return min(right, down)

2.给你一个数组arr,和一个整数aim。如果可以任意选择arr中的数字,能不能累加得到aim,返回true 或者 false

1 # 关联求字符串的全部子序列
2 def isSum(arr, i, sum, aim):
3     if i == len(arr):
4         return sum == aim
5     return isSum(arr, i+1, sum, aim) or isSum(arr, i+1, sum+arr[i], aim)

 

以上是关于递归之求二维数组的最短路径给定一个整数和一个数组任意选择数组中的数累加能否得到该整数的主要内容,如果未能解决你的问题,请参考以下文章

1091.二维矩阵中的最短路径

航线规划必学:Dijkstra最短路径算法

最短路径 深入浅出Dijkstra算法(一)

坐在马桶上看算法:Dijkstra最短路径算法

数据结构图---最短路径(弗洛伊德算法)

修改广度优先搜索算法以记住矩阵中的最短路径