[递归和循环]面试题7

来源:互联网 发布:淘宝发货通知短信 编辑:程序博客网 时间:2024/05/20 13:03

变态跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

分析思路:

同一次跳1级,一次跳2级类似,先分析n=3,n=4时,发现n=4时=f(3)+f(2)+f(1)+1

/** * 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 *  * @param array * @return */public int JumpFloorII(int target) {if (target <= 0) {return 0;}if (target == 1) {return 1;}if (target == 2) {return 2;}int[] record = new int[target];record[0] = 1;record[1] = 2;for (int i = 2; i < target; i++) {record[i] = 0;for(int j=i-1;j>=0;j--){record[i]+=record[j];}record[i] += 1;}return record[target - 1];}

该题还可以更简单:

public int JumpFloorIII(int target) {if (target <= 0) {return 0;}if (target == 1) {return 1;}if (target == 2) {return 2;}int[] record = new int[target];record[0] = 1;record[1] = 2;for (int i = 2; i < target; i++) {record[i] = record[i-1]*2;}return record[target - 1];}

上述算法是根据

f(n)=f(n-1)+f(n-2)+...f(1);

f(n-1)=f(n-2)+f(n-3)+...f(1);

两个式子相减得

f(n)=f(n-1)*2

0 0
原创粉丝点击