题目在这:https://leetcode-cn.com/problems/check-if-all-the-integers-in-a-range-are-covered/
思路分析:
法一(展开法):
我们可以将所给区间全部展开。
比如:ranges = [[1,5],[6,8]], left = 1, right = 7
将ranges全部展开成 [1,2,3,4,5,6,7,8,]
然后遍历left到right,看看是不是在我们展开的数组里即可。
完整代码
def isCovered(self, ranges: List[List[int]], left: int, right: int) -> bool:
temp = [] # 存展开后的数组
for i in ranges:
temp.append(i[0])
temp.append(i[-1])
while i[0] < i[-1]-1: # 展开
i[0] +=1 # 对比第一个数和最后一个数。小于则加1然后追加到数组里,
temp.append(i[0])
for j in range(left,right+1): # 遍历left到right
if j not in temp:
return False
return True
法二(双循环法):
直接遍历left到right,然后内层遍历所给数组区间,有一个区间可以覆盖则直接跳转遍历下一个。
遍历到最后都没有区间可以覆盖,则返回False。
完整代码
for i in range(left,right+1):
for j in ranges:
if j[0]<= i <= j[1]: # 说明至少有一个区间可以覆盖该数
break
if j == ranges[-1]:# 遍历到最后都没有区间可以覆盖,则返回False
return False
return True