前言
自己偶然看到题目后写的,测试数据是没问题的;
就是方法用的比较傻,大家如果有好的方法,还欢迎大家进行讨论
一、题目
给定一个n * m 的矩阵 carrot, carrot[i][j] 表示(i, j) 坐标上的胡萝卜数量。 从矩阵的中心点出发,每一次移动都朝着四个方向中胡萝卜数量最多的方向移动,保证移动方向唯一。 返回你可以得到的胡萝卜数量。
示例 1:
输入:
carrot =
[[5, 7, 6, 3],
[2, 4, 8, 12],
[3, 5, 10, 7],
[4, 16, 4, 17]]
输出: 83
解释:起点坐标是(1, 1),
移动路线是:4 -> 8 -> 12 -> 7 -> 17 -> 4 -> 16 -> 5 -> 10
示例 2:
输入:
carrot =
[[5, 3, 7, 1, 7],
[4, 6, 5, 2, 8],
[2, 1, 1, 4, 6]]
输出: 30
解释:起始点是 (1, 2),
移动路线是: 5 -> 7 -> 3 -> 6 -> 4 -> 5
二、解题
代码如下(示例):
def PickCarrots(carrot ):
#计算 中心点 (不知道为什么要这么算 [捂脸])
rows = len(carrot)
cols = len(carrot[0])
row = int(rows/2) - 1
col = int(cols/2) - 1
max_value_list = [carrot[row][col]] # 获取当前值
# 循环 至 无路可走
while True:
carrot[row][col] = 0 # 将当前值归0,以避免重走
#上下左右 移动
up_value = carrot[row - 1][col] if row != 0 else 0
down_value = carrot[row + 1][col] if row != rows-1 else 0
left_value = carrot[row][col - 1] if col != 0 else 0
right_value = carrot[row][col + 1] if col != cols-1 else 0
move_list = [up_value, down_value, left_value, right_value]
# 统计 移动到的位置的 值
max_index = move_list.index(max(move_list))
max_value = move_list[max_index]
if max_value == 0: #无路可走的判断条件
print (max_value_list)
return sum(max_value_list)
max_value_list.append(max_value)
# 将位置进行移动
if max_index == 0:
row = row - 1
elif max_index == 1:
row = row + 1
elif max_index == 2:
col = col - 1
elif max_index == 3:
col = col + 1
if __name__ == '__main__':
carrot = [
[5, 7, 6, 3],
[2, 4, 8, 12],
[3, 5, 10, 7],
[4, 16, 4, 17]]
print(PickCarrots(carrot ))
carrot = [
[5, 3, 7, 1, 7],
[4, 6, 5, 2, 8],
[2, 1, 1, 4, 6]]
print(PickCarrots(carrot ))
提交过程好像有错误,但不知道是哪里的问题。。。
[尴尬]
还请大神指正
[手动抱拳]