在 Python 中寻找炸弹爆炸时安全的位置的程序?
假设我们有一个二维二进制矩阵,其中 1 表示炸弹,0 表示空单元格。当一颗炸弹爆炸时,所有同一行和同一列上的空格都会受到损坏。我们必须找到我们可以站在的不受损坏的空间的数量。
所以,如果输入是:
1 | 1 | 0 |
---|---|---|
0 | 0 | 0 |
0 | 0 | 0 |
那么输出将为 2,因为有两个空间-右下角的单元格和中间的右侧单元格是安全的。
为了解决这个问题,我们将按照以下步骤进行:
- r:一个与矩阵的行数相同的布尔列表,填充为 false
-
c:一个与矩阵的列数相同的布尔列表,填充为 false
-
对于 i 在范围 0 到矩阵行数-1,执行以下操作:
- 对于 j 在范围 0 到矩阵列数-1,执行以下操作:
- 如果矩阵[i,j]与 1 相同,则
-
r[i] = True,c[j] = True
- 对于 j 在范围 0 到矩阵列数-1,执行以下操作:
-
ct = 0
-
对于 i 在范围 0 到矩阵行数-1,执行以下操作:
- 对于 j 在范围 0 到矩阵列数-1,执行以下操作:
- 如果 r[i] 为 false,并且 c[j] 为 false,则
-
ct = ct+1
- 对于 j 在范围 0 到矩阵列数-1,执行以下操作:
-
返回 ct
让我们看以下实现以更好地理解:
示例
class Solution:
def solve(self, matrix):
r = [False for i in range(len(matrix))]
c = [False for i in range(len(matrix[0]))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] == 1:
r[i] = True
c[j] = True
ct = 0
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if r[i] == False and c[j] == False:
ct += 1
return ct
ob = Solution()
matrix = [
[1, 1, 0],
[0, 0, 0],
[0, 0, 0]
]
print(ob.solve(matrix))
输入
[
[1, 1, 0],
[0, 0, 0],
[0, 0, 0]
]
输出
2