有一堆石頭,每塊石頭的重量都是正整數。
每一回合,從中選出兩塊最重的石頭,然後將它們一起粉碎。假設石頭的重量分別爲 x 和 y,且 x <= y。那麼粉碎的可能結果如下:
如果 x == y,那麼兩塊石頭都會被完全粉碎;
如果 x != y,那麼重量爲 x 的石頭將會完全粉碎,而重量爲 y 的石頭新重量爲 y-x。
最後,最多隻會剩下一塊石頭。返回此石頭的重量。如果沒有石頭剩下,就返回 0。
思路:模擬這個過程..在這個當中沒有過多的優化只有對過程的模仿
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
# 只要還有兩個以上的石頭,循環就要進行下去
while len(stones)>=2:
#排序,然後最後兩個元素就是需要進行碰撞的連個石頭
stones.sort()
chazhi=stones[-1]-stones[-2]
# 從列表彈出
tan1=stones.pop()
tan2=stones.pop()
#如果沒有消失將剩餘的重量成爲一個元素加入列表
if chazhi!=0:
stones.append(chazhi)
#如果最後剩餘一個石頭
if len(stones)==1:
return stones[0]
else:
return 0