554.磚牆--python

題:畫一條自頂向下的、穿過最少磚塊的垂線。

法:這題極端情況,一條垂線穿過最多磚塊的數目就是,整個磚牆的行數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())
                

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章