Python程序:查找球落在网格盒中的位置


假设我们有一个m x n的网格盒,每个单元格都放置一个挡板,挡板的方向要么是从右上角到左下角,要么是从左上角到右下角。现在,将球从顶部的单元格放入盒中,我们必须检查该球是否到达盒子的底部。网格以矩阵的形式给出。如果单元格标记为1,则对角线挡板从左上角延伸到右下角;如果标记为-1,则从右上角延伸到左下角。如果将n个球放入盒中,我们必须找出有多少个球到达底部。

3x3网格盒的示例。

因此,如果输入类似于mat =

111-1
-111-1
1-1-11
1-11-1

则输出将为[-1, -1, -1, -1]

为了解决这个问题,我们将遵循以下步骤:

  • i := mat的行数

  • j := mat的列数

  • res := 一个新的列表

  • 对于val从0到j,执行:

    • x := val

    • 对于r从0到i,执行:

      • s := mat[r, x]

      • x := x + mat[r, x]

      • 如果x < 0 或 x >= j 或 mat[r, x] 与s不同,则

        • 在res的末尾添加元素-1

        • 退出循环

    • 否则:

      • 在res的末尾添加x

  • 返回res

示例

让我们看下面的实现来更好地理解

def solve(mat):
   i, j = map(len, (mat, mat[0]))
   res = []
   for val in range(j):
      x = val
      for r in range(i):
         s = mat[r][x]
         x += mat[r][x]
         if x < 0 or x >= j or mat[r][x] != s:
            res += [-1]
            break
      else:
         res += [x]
   return res

print(solve([[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]))

输入

[[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]

输出

[-1, -1, -1, -1]

更新于: 2021年10月6日

浏览量:155

开启您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.