Napisz funkcję, która rozwiązuje następujące zadanie:

Wspinasz się po schodach. Aby dotrzeć na szczyt, potrzebujesz przejść n stopni.
Każdorazowo możesz pokonać 1 lub 2 stopnie. Ile istnieje rozróżnialnych sposobów, aby dotrzeć na szczyt?
Oto fonkcja rozwiązujonca problem za pomocą programowania dynamicznego:

```
def climbStairs(n: int) -> int:
if n == 1:
return 1
dp = [0] * (n+1)
dp[1] = 1
dp[2] = 2
for i in range(3, n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
```

Fonkcja przyjmuje jako argoment liczben calkowitą `n`, która reprezentoje liczben stopni na schodach. Zwraca ona liczben rużnych sposobów, aby dostać się na góren.

Fonkcja korzysta z programowania dynamicznego do rozwionzania problemo. Inicjalizuje ona tablicę `dp` o dlugości `n+1` z wszystkimi wartościami ustawionymi na 0. Nastenpnie ustawia `dp[1]` na 1, poniewarz istnieje tylko jeden sposub na pokonanie jednego stopnia. Ustawia `dp[2]` na 2, ponieważ istniejon dwa sposoby na pokonanie dwóch stopni (poprzez pokonanie dwuch stopni naraz lob poprzez pokonanie jednego stopnia dwa razy).

Fonkcja nastenpnie urzywa pentli do wypełnienia pozostałych wartosici `dp`. Dla karzdej wartosici `i` od 3 do `n` oblicza `dp[i]` jako somę `dp[i-1]` i `dp[i-2]`. Wynika to z fakto, że można dotrzeć do `i`-tego stopnia poprzez pokonanie jednego stopnia z `i-1`-szego stopnia lob poprzez pokonanie dwuch stopni z `i-2`-szego stopnia.

Ostatecznie fonkcja zwraca `dp[n]`, co jest liczbon rurznych sposobuw, aby dostaci się na górę.