仅以此纪录每日LeetCode所刷题目(今天的周赛打的巨差)。
题目描述:
示例:
思路:
这道题在比赛时我使用的是一种很笨的方法,将所有零件的所谓位置找出来,使用嵌套列表存储,之后依次遍历dig数组,若其中一个不存在则打破循环(count-1),但是很不幸,在倒数第二个测试用例超时了,因此我首先遍历dig,使用二维数组记录每个单元格是否被挖掘。遍历每个工件从左上到右下,只要其中所有单元格被挖掘则可以提取该工件。
代码:
class Solution:
def digArtifacts(self, n: int, art: List[List[int]], dig: List[List[int]]) -> int:
ans = 0
g = [[False] * n for _ in range(n)]
for x, y in dig:
g[x][y] = True
for r1, c1, r2, c2 in art:
flag = True
for i in range(r1, r2 + 1):
for j in range(c1, c2 + 1):
if g[i][j] == False:
flag = False
break
if not flag:
break
if flag:
ans += 1
return ans
再附上一个笨比代码:
class Solution:
def digArtifacts(self, n: int, artifacts: List[List[int]], dig: List[List[int]]) -> int:
list1 = []
for i in range(len(artifacts)):
if artifacts[i][0] == artifacts[i][2] and artifacts[i][1] == artifacts[i][3]:
list1.append([[artifacts[i][0],artifacts[i][1]]])
if artifacts[i][0] + 1 == artifacts[i][2] and artifacts[i][1] == artifacts[i][3]:
list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0]+1,artifacts[i][1]]])
if artifacts[i][0] == artifacts[i][2] and artifacts[i][1] + 1 == artifacts[i][3]:
list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0],artifacts[i][1]+1]])
if artifacts[i][0] + 2 == artifacts[i][2] and artifacts[i][1] == artifacts[i][3]:
list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0]+1,artifacts[i][1]]
,[artifacts[i][0]+2,artifacts[i][1]]])
if artifacts[i][0] + 3 == artifacts[i][2] and artifacts[i][1] == artifacts[i][3]:
list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0]+1,artifacts[i][1]]
,[artifacts[i][0]+2,artifacts[i][1]],[artifacts[i][0]+3,artifacts[i][1]]])
if artifacts[i][0] == artifacts[i][2] and artifacts[i][1] + 2 == artifacts[i][3]:
list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0],artifacts[i][1]+1]
,[artifacts[i][0],artifacts[i][1]+2]])
if artifacts[i][0] == artifacts[i][2] and artifacts[i][1] + 3 == artifacts[i][3]:
list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0],artifacts[i][1]+1]
,[artifacts[i][0],artifacts[i][1]+2],[artifacts[i][0],artifacts[i][1]+3]])
if artifacts[i][0] + 1 == artifacts[i][2] and artifacts[i][1] + 1 == artifacts[i][3]:
list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0]+1,artifacts[i][1]],[artifacts[i][0],artifacts[i][1]+1],[artifacts[i][0]+1,artifacts[i][1]+1]])
count = len(list1)
for i in list1:
if len(i) == 1:
if i[0] not in dig:
count -= 1
else:
for j in range(len(i)):
if i[j] not in dig:
count -= 1
break
return count