天池 在线编程 捡胡萝卜 题目


前言

自己偶然看到题目后写的,测试数据是没问题的;
就是方法用的比较傻,大家如果有好的方法,还欢迎大家进行讨论

一、题目

给定一个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 ))             

提交过程好像有错误,但不知道是哪里的问题。。。
[尴尬]
还请大神指正
[手动抱拳]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值