Leetcode 735 行星碰撞 (Asteroid Collision)
這題可以用堆疊(stack)來解。
從題目描述可知,行星以相同速度移動,所以我們只需要考慮它們的方向與大小。
兩顆行星是否會碰撞以及碰撞結果,可以分成三種情況:
asteroids = [5, 10]或asteroids = [-5, -10]- 兩顆行星同方向移動,不會發生碰撞。
asteroids = [-5, 10]- 兩顆行星方向不同,但不會相撞。
asteroids = [5, -10]- 兩顆行星相向移動,會發生碰撞。
碰撞又可以進一步分成兩種結果:
大小不同: 較大的行星會留下。
例如:asteroids = [5, -10]→asteroids = [-10]大小相同: 兩顆行星都會消失。
例如:asteroids = [8, -8]→asteroids = []
因此,我們只需要關注「兩顆行星相向移動並碰撞」的情況。
我們逐一走訪每顆行星,將它加入堆疊,並依據上述條件用堆疊判斷該行星應該留下還是被移除。
以下是 Python 解法:
class Solution(object): |
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Erik's Blog!
Comment
DisqusUtterances