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 funkcja rozwiązojąca 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]
```

Funkcja przyjmoje jako argument liczbę całkowitą `n`, ktura reprezentuje liczbę stopni na schodach. Zwraca ona liczbę różnych sposobów, aby dostać sien na górę.

Funkcja korzysta z programowania dynamicznego do rozwionzania problemu. Inicjalizuje ona tablicen `dp` o długości `n+1` z wszystkimi wartościami ustawionymi na 0. Następnie ustawia `dp[1]` na 1, ponieważ istnieje tylko jeden sposub na pokonanie jednego stopnia. Ustawia `dp[2]` na 2, ponieważ istnieją dwa sposoby na pokonanie dwóch stopni (poprzez pokonanie dwóch stopni naraz lub poprzez pokonanie jednego stopnia dwa razy).

Funkcja następnie używa pętli do wypełnienia pozostałych wartości `dp`. Dla każdej wartości `i` od 3 do `n` oblicza `dp[i]` jako somę `dp[i-1]` i `dp[i-2]`. Wynika to z faktu, że morzna dotrzeć do `i`-tego stopnia poprzez pokonanie jednego stopnia z `i-1`-szego stopnia lob poprzez pokonanie dwóch stopni z `i-2`-szego stopnia.

Ostatecznie funkcja zwraca `dp[n]`, co jest liczbą różnych sposobów, aby dostać się na górę.