題:畫一條自頂向下的、穿過最少磚塊的垂線。
法:這題極端情況,一條垂線穿過最多磚塊的數目就是,整個磚牆的行數len(walls)。那麼我們對每個位置都 建立index與磚塊邊緣數目的關係。比如題目中給的例子:行數=len(walls)=6,列數=6,對於index=0和index=6是整個磚牆的邊緣,不考慮。對於index=1時,在該位置結束的磚塊數有3個,index=2時,在該位置結束的磚塊數僅有1個,index=3時,在該位置結束的磚塊數有3個,index=4時,在該位置結束的磚塊數有4個,是最多的情況,所以len(walls)-4,就是本題的答案。
注意:記錄index與數目關係時,我一開始考慮用list,初始化list中每個元素爲0,但發現沒有用字典好,字典可以不初始化,對每個dict[key]自增1時,如果該key原來沒有值,就返回0。
def leastBricks(self, wall):
"""
:type wall: List[List[int]]
:rtype: int
"""
mark={}
for x in wall:
tmp=0
for i in range(len(x)-1):
tmp+=x[i]
mark[tmp]=mark.get(tmp,0)+1
print(mark)
if not mark:return len(wall)
return len(wall)-max(mark.values())