题解 | #跳台阶扩展问题#
跳台阶扩展问题
http://www.nowcoder.com/practice/22243d016f6b47f2a6928b4313c85387
升级版跳台阶
方法一:还可以使用找规律的方案,但此提的本意应该不是这么简单的(该方法属于取巧)
int jumpFloorII(int number) { return pow(2,number - 1) }
方法二:从后往前跳,当i青蛙在第n个台阶时,共有f(n) = f(n-1) + f(n-2) + ....... + f(1)种方法;当青蛙在第 n-1 个台阶时,共有f(n-1) + f(n-2) + ....... + f(1)种方法,因此,该方式的状态转移方程(此处应用DP法的概念)如下:
f(n) = 2 f(n-1) ,当 n>1 时;
f(1) = 1, 当 n=1 时。
int jumpFloorII(int number) { int ret = 0; //记录返回值 int a = 1; //初始值 f(1) if(number == 1) return 1; for(int i = 2; i < number + 1; ++i) { ret = 2 * a; a = ret; } return ret; }