递归之求二维数组的最短路径、给定一个整数和一个数组任意选择数组中的数累加能否得到该整数
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)
Talk is cheap, show my code to you.