在楼梯台阶为n阶情况下,每次可跳1次或者2次,结果返回为到达n阶楼梯的跳法
假设在第i层台阶之前,可以通过i-1处跳1阶台阶到达第i层,也可通过i-2处跳2阶到达第i层.......
同理如果允许一次跳三层台阶则 可在i - 3 处跳 3 阶到达 第 i 层台阶。
即 到达第i层台阶的方式由i-1、i-2的方式构成 。。 具体代码如下:
public class Solution {
public int JumpFloorByOneOrTwo(int target) {
if(target <= 0)
return 0;
if(target == 1)
return 1;
if(target == 2)
return 2;
//非递归方式 利用f(n) = f(n-1) + f(n-2)
/*
运行时间约为 : 10 ms
所占空间约为 : 9472k
*/
int res = 0, one_floor = 1, two_floor = 2;
for(int i = 2 ; i < target ; i ++){
res = one_floor + two_floor;
one_floor = two_floor;
two_floor = res;
}
return res;
/**
递归方式
运行时间约为 : 449 ms
所占空间约为 : 9284k
return JumpFloor(target - 1) + JumpFloor(target - 2);
*/
}
}
通过对算法的简单比较,可以发现同样的测试数据下,非递归式算法较递归式算法要高效近49倍,而相比之下非递归算法中所使用内存空间仅比递归式多200k左右。