疯狂跳台阶
上一篇跳台阶中我们特意指定了每次可以跳1阶或者2阶台阶,构成了斐波那契数列,通过归并可以计算出n节台阶总共需要多少跳法。没有看上一篇的同学可以看我上一篇博客:http://blog.csdn.net/TsuiXh/article/details/52802735 ,疯狂跳台阶这次稍微变换了一下条件,这次每次跳的台阶可以是1,2 …… n阶,计算跳n节台阶总共有多少种方法?
- 思路
(1)假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2);假定第一次跳的是3阶,那么剩下的是n-3个台阶,跳法是f(n-3)……假定第一次跳的是n-1阶,那么剩下的是1个台阶,跳法是f(1); 假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是1种;
(2)总跳法为: f(n) = 1+f(n-1) + f(n-2)+….+f(1) (第一个1是跳n阶只有一种方法)
(3)根据(2)可以得出有一阶的时候 f(1) = 1 ;有两阶的时候可以有 f(2) = 1+f(1)=2;有三阶的时候可以有 f(3) = 1+f(2)+f(1)=4…依次内推,有n阶时f(n)=2^(n-1)。
为了简化运算,可以用移位操作来计算2^(n - 1):
public class Solution {
public int JumpFloorII(int target) {
//计算2^(target-1)
return 1<<--target;
}
}
给大家提供测试网址,在这里剑指offer可以选择对应的题目,然后将代码拷贝进去提交运行就可以了,欢迎大家交流,如果有更好的方法也欢迎大家提出!