Hackerrank问题:给定一个M * N矩阵,其中每个单元格可以具有值0或2,一个值1的单元格可以转换为2 如果它具有至少2个值为2的相邻单元,则一次找出所有可能的转换(即,转换后的单元可能不会用于转换另一单元)
约束:无
我的方法:
这是我在Python中的解决方案:
import sys
data = sys.stdin.readlines()
dim = data.pop(0)
r = int(dim.split(' ')[0])
c = int(dim.split(' ')[1])
mat = []
def getElem(c, mat, index):
return mat[int(index/c)][int(index % c)]
for line in data:
arr = list(map(int, line.split()))
mat.append(arr)
possibleConversions = 0
for i in range(0,r):
for j in range(0,c):
if mat[i][j] != 1:
continue
idx = (i * c) + j
adjIndices = []
if idx % c == 0:
adjIndices = [(idx - c), (idx - c + 1), (idx + 1), (idx + c), (idx + c + 1)]
elif (idx + 1) % c == 0:
adjIndices = [(idx - c -1), (idx - c), (idx - 1), (idx + c - 1), (idx + c)]
else :
adjIndices = [(idx - c -1), (idx - c), (idx - c + 1), (idx - 1), (idx + 1), (idx + c - 1), (idx + c), (idx + c + 1)]
adjIndices = [index for index in adjIndices if ((index >= 0) and (index < (r*c) and (getElem(c, mat, index) == 2)))]
if (len(adjIndices) >= 3) :
possibleConversions += 1
print(possibleConversions)
这似乎通过了2个测试用例,其余4个隐藏用例都遇到了运行时错误。 关于什么可能崩溃的任何想法?
我尝试过使用Java的相同解决方案,其中在接受4个测试用例的输入(使用Scanner或BufferedReader)时崩溃了
(花了3天时间把我的头撞在墙上)
编辑1 :放置除代码块之外的try-:
if mat[i][j] != 1:
continue
似乎为所有4个隐藏测试用例触发了except块。我目前的怀疑是,当矩阵很大时,执行必须超时。
编辑2 :如果行或列的大小> 100,但仍看到RT错误,则可以通过将行或列任意设置为10来排除以前的理论。