利用高中捆绑法排列组合来进行递归
变态跳台阶
http://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387
设n级台阶有f(n)种策略,假如先跳一步,则后面的n-1步有f(n-1)种
如果先跳两步,则后面的n-2步有f(n-2)种,以此类推一直到先走了n步,后面有0种即f(0)=0.
相加一共有f(n)=f(n-1)+f(n-2)+...f(0)
有f(n-1)=f(n-2)+...f(0),相减得f(n)=2f(n-1).
其实和高中的捆绑法排列组合有点相似,先捆绑一步,那么后面的组合数有f(n-1)种,捆绑2步,则后面的组合数有f(n-2)种。。。相加起来就是所有情况种数。
public class Solution {
public int JumpFloorII(int target) {
//结束条件,当后面需要考虑的步数就剩一步的时候此时停止
if(target==1){
return 1;
}
//递归体,要考虑f(n)需要先解决f(n-1)
else{
return 2*JumpFloorII(target-1);
}
}
查看10道真题和解析