【Li-Taste】70. Steigen Sie die Treppe hinauf
Angenommen, Sie steigen Treppen. Es dauert n Schritte, bis Sie die Spitze des Gebäudes erreichen können. Sie können 1 oder 2 Stufen gleichzeitig erklimmen. Auf wie vielen verschiedenen Wegen kann man zur Spitze des Gebäudes gelangen?
Beispiel 1:
Eingabe: n = 2
Ausgabe: 2
Erläuterung: Es gibt zwei Möglichkeiten, auf die Spitze des Gebäudes zu klettern.
1. 1 阶 + 1 阶
2. 2 阶
Beispiel 2:
Eingabe: n = 3
Ausgabe: 3
Erläuterung: Es gibt drei Möglichkeiten, auf die Spitze des Gebäudes zu klettern.
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
Hinweis:
1 <= n <= 45
Antwort
- Bestimmen Sie die Bedeutung des dp-Arrays und des Index.
Die Definition von dp [i] lautet: Um die Treppe zum i-ten Stock zu erklimmen, gibt es dp [i] -Methoden - Bestimmen Sie die rekursive Formel
Zustandsübergangsgleichung dp[i] = dp[i - 1] + dp[i - 2]; - So initialisieren Sie das dp-Array
dp[1] = 1, dp[2] = 2, unabhängig davon, wie dp[0] initialisiert wird - Bestimmen Sie die Durchlaufreihenfolge
von vorne nach hinten - Leiten Sie beispielsweise das dp-Array ab (drucken Sie das dp-Array).
Wenn N 5 ist, sollte das dp-Array eine Sequenz sein: 1 2 3 5 8 (Indizes beginnen bei 1)
public int climbStairs(int n) {
int[] dp = new int[n + 1];
if (n <= 1) {
return n;
}
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
Variablen statt Arrays:
public int climbStairs(int n) {
if(n <= 2) {
return n;
}
int a = 1, b = 2, sum = 0;
for(int i = 3; i <= n; i++){
sum = a + b; // f(i - 1) + f(i - 2)
a = b; // 记录f(i - 1),即下一轮的f(i - 2)
b = sum; // 记录f(i),即下一轮的f(i - 1)
}
return b;
}