Вы поднимаетесь по лестнице. Чтобы достичь вершины, требуется n шагов.
Каждый раз вы можете подняться либо на 1, либо на 2 ступеньки. Сколькими различными способами вы можете взобраться на вершину?
Входные данные: n = 2
Результат: 2
Пояснение:
Есть два способа подняться на вершину.
1. 1 ступенька + 1 ступенька
2. 2 ступеньки
Входные данные: n = 3
Результат: 3
Описание:
Есть три пути к восхождению на вершину.
1. 1 ступенька + 1 ступенька + 1 ступенька
2. 1 ступенька + 2 ступенька
3. 2 ступенька + 1 ступенька
class Solution {
public:
int climbStairs(int n) {
int dp[n+1];
dp[0]=1,dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
};
Задача решается методом динамического программирования.
Метод динамического программирования заключается в следующем:
Разделить проблему.
Найти решение на каждом этапе.
Сохранить результат для последующего использования.