一個小孩爬一個 n 層臺階的樓梯浙芙。他可以每次跳 1 步登刺, 2 步 或者 3 步。實現(xiàn)一個方法來統(tǒng)計總共有多少種不同的方式爬到最頂層的臺階嗡呼。
樣例
n = 3
1 + 1 + 1 = 2 + 1 = 1 + 2 = 3 = 3
返回 4.
代碼
public class Solution {
/**
* @param n an integer
* @return an integer
*/
public int climbStairs2(int n) {
// f[i]代表到達第i階臺階的方式個數(shù)
int[] f = new int[n+1];
f[0] = 1;
for (int i = 0; i <= n; i++)
// f[i] = f[i - 1] + f[i - 2] + f[i - 3]
for (int j = 1; j <= 3; j++) {
if (i >= j) {
f[i] += f[i-j];
}
}
return f[n];
}
}
public class Solution {
/*
* @param n: An integer
* @return: An integer
*/
public int climbStairs2(int n) {
int last3 = 1;
int last2 = 1;
int last = 2;
if (n <= 1) {
return 1;
}
if (n == 2) {
return 2;
}
int now = 0;
for (int i = 3; i <= n; i++) {
// 這個賦值順序要注意纸俭,last = now要放最后
// 如果寫成last = now; last2 = last; last3 = last2;順序則三個參量值都是now
now = last + last2 + last3;
last3 = last2;
last2 = last;
last = now;
}
return now;
}
}