php实现变态跳台阶(记忆化递归) 一.总结 1.本题思路(分类讨论思路,注意初始值和边界值):第一步如果1,那剩下的就是jumpFloorII($number-1)(下面jumpFloorII以j表示),第一步如果2,那剩下的就是j($number-2),...,以此类推 所以j(n)=j(n-1)+j(n-2)+...+j(0),其实j(n)就是2的n次方 二.php实现变态跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.…
跳台阶是斐波那契数列的一个典型应用,其思路如下: # -*- coding:utf-8 -*- class Solution: def __init__(self): self.value=[0]*50 def jumpFloor(self, number): # write code here self.value[0]=1 self.value[1]=2 for i in range(2,number): self.value[i]=self.value[i-1]+self.value[i-…
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: n<=0时,有0种跳法 n=1时,只有一种跳法 n=2时,有两种跳法 已知当n>2时,当最后一次跳1级台阶,则之前有f(n-1)种跳法,当最后一次跳2级台阶时,之前有f(n-2)种跳法,即f(n)=f(n-1)+f(n-2); 故此处采用递归的方法 递归(英语:recursion)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法. publ…
题目:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). f(n) = f(n-1) + f(n-2) 基本思路 这道题在剑指offer中实际是当作递归的反例来说的. 递归的本质是吧一个问题分解成两个或者多个小问题,如果多个小问题存在互相重叠的情况,那么就存在重复计算. f(n) = f(n-1) + f(n-2) 这种拆分使用递归是典型的存在重叠的情况,所以会造成非常多的重复计算. 另外,每一次函数调用爱内存中都需要分配空间,每…
变态跳台阶 时间限制:1秒空间限制:32768K 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   分析一下明天是个斐波那契数列,我们一步一步退出其通项公式.   设台阶数为n, 总跳法为jumps   n          jumps 1 1 2 2 3 4 4 8 5 16   现在猜测其通项公式为 fbonicc(n) = 2 * fbonicc(n - 1)   列出4的全部跳法 5的全部跳法 1111 1111…
首先说一个剪枝的概念: 剪枝出现在递归和类递归程序里,因为递归操作用图来表示就是一棵树,树有很多分叉,如果不作处理,就有很多重复分叉,会降低效率,如果能把这些分叉先行记录下来,就可以大大提升效率——这就是剪枝技巧.他的做法和动规很像(将状态保存起来,用空间换时间),就是在递归的过程中把出现的状态存储下来 具体见代码: source code(跳台阶): package niuke; public class 跳台阶 { public static int Solution1(int i,int…
跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) { ) ; ) ; ; ; ; ; i <= number; i++) { rtn = n1 + n2; n1 = n2; n2 = rtn; } return rtn; } }; 变态跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种…
HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉归并排序好像不是得要相邻的呀.然后就这样晕--刚才又一次看了才发现,归并就是相邻的交换的,正好是用来求逆序数的,唉--真的是做这个归并排序比赛就来了--真好! #include<iostream> #include<cstdio> #include<cstring> #in…
典型的记忆化递归问题. 这类问题的记忆主要是利用数组记忆.那么已经计算过的值就能够直接返回.不须要进一步递归了. 注意:下标越界.递归顺序不能错,及时推断是否已经计算过值了,不要多递归. 或者直接使用动态规划法填好表也是能够的. #include <stdio.h> #include <limits.h> const int MAX_N = 21; int W[MAX_N][MAX_N][MAX_N]; int getValue(int a, int b, int c) { if…
变态跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 实现代码 function jumpFloor(number) { if (number<0){ return -1; }else if(number <=2){ return number } var arr = []; arr[0] = 1; arr[1] = 1; for(var i = 2; i <= number; i++) { arr[i] =…