题目
一次走一步或者两步走完台阶,一共要多少种方法
分析
从上图可以看到规律,到第n个台阶时,要么从n-1台阶走一步到达,要么从n-2个台阶走两步到达,即前一台阶和前两台阶走法的和,用公式表达:f(n)=f(n-1)+f(n-2)
解题
方法1
递归,由于每次都要完全计算,层层计算,台阶增多时间复杂度指数增加,效率低下
static int f(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
return f(n - 1) + f(n - 2);
}
方法2
循环,算一遍
static int f(int n) {
int[] total = new int[n + 1];
total[1] = 1;
total[2] = 2;
for (int i = 3; i <= n; i++) {
total[i] = total[i - 1] + total[i - 2];
}
return total[n];
}
方法3
循环,算一遍
static int f(int n) {
if (n == 1 || n == 2) {
return n;
}
int one = 1;
int two = 2;
int sum = 0;
for (int i = 3; i <= n + 1; i++) {
sum = one + two;
one = two;
two = sum;
}
return sum;
}