LeetCode 70 · Climbing Stairs · Easy

Merdiven Çıkmanın Yolları

Çözümün her adımını burada izleyebilirsin. Bir n seç, İleri'ye bas ya da Oynat'a tıkla; her basamağın yol sayısının alttaki iki basamaktan nasıl hesaplandığını gör.

Fikir üç adımda

  1. 1

    Son hamleye bak

    Bir basamağa çıkmadan hemen önce ya bir alttaki basamaktaydın ve 1 adım attın, ya da iki alttakindeydin ve 2 adım attın. Başka yolu yok.

  2. 2

    Alttaki iki sayıyı topla

    Bu yüzden bir basamağa çıkan yol sayısı, bir alttakinin ve iki alttakinin yol sayılarının toplamıdır: 1, 2, 3, 5, 8, 13…

  3. 3

    Sadece son ikisini tut

    Aşağıdan yukarıya tek bir döngüyle çık. Her turda sadece son iki sonuca ihtiyacın var, o yüzden iki değişken (twoBelow, oneBelow) yeter.

Adım adım izle

Merdiven (her basamağın üstündeki sayı, oraya kaç farklı yoldan çıkıldığını gösteriyor)

henüz hesaplanmadı şu an hesaplanan twoBelow / oneBelow'un tuttuğu hesaplandı

Değişkenler

Kod (Solution.cs içindeki metot)

Neden O(n) zaman, O(1) bellek?

Her basamağı bir kez hesaplıyoruz: O(n) zaman. Merdiven 5 basamak da olsa 45 basamak da olsa sadece üç sayı tutuyoruz (twoBelow, oneBelow, ways): O(1) bellek.

Aynı formülü kendini çağıran bir metotla (ClimbStairs(n - 1) + ClimbStairs(n - 2)) yazsaydık aynı basamaklar tekrar tekrar hesaplanırdı. n = 5'te bile 3. basamak 2 kez, 2. basamak 3 kez hesaplanır; n = 45'te metot 2 milyardan fazla kez çağrılır ve LeetCode "Time Limit Exceeded" verir.