题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
int jumpFloor(int number) {
/**如果有一级台阶 有一种跳法;有两级台阶,有两种跳法
1.若number=1,则total = 1;
2.若number=2,则total = 2;
3.若number>=3,则total = jumpFloor(number-1)+jumpFloor(number-2)
4.本题的主要思路不是从number到1的分析 而是从1到number的分析 算法时间复杂度o(n) 需要5个辅助空间 所以空间复杂度是o(1)
*/
int i = 0;
int result[3] = { 0,1,2 };
int step2 = result[1];//存小的值
int step1 = result[2];//存大的值
int stepN = 0;
if (number <= 2)return result[number];
for (i = 3; i <= number; i++) {
stepN = step1 + step2;
step2= step1;
step1 = stepN;
}
return stepN;
}
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
int jumpFloorII(int number) {
unsigned long long counter[101] = { 0 };
int i = 0;
counter[0] = 1;
counter[1] = 1;
counter[2] = 2;
int calculatedIndex = 2;
if (number <= calculatedIndex)
return counter[number];
if (number > 100)
number = 100;
for (i = calculatedIndex + 1; i <= number; i++) {
counter[i] = 2 * counter[i - 1];
}
calculatedIndex = number;
return counter[number];
}
今天太累了,脑瓜子转不动了,改天精神了写一下原始跳台阶问题的动态规划解法以及变态问题的解析。