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.