青蛙

【剑指offer】02-青蛙跳台阶

主宰稳场 提交于 2019-12-05 11:31:23
题目:    一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 思考:  n = 1, 1 ---1种  n = 2, 1+1 2 ---2种  n = 3, 1+1+1 1+2, 2+1 ---3种  n = 4, 1+1+1+1      1+1+2, 1+2+1, 2+1+1      2+2 ---5种  n = 5, 1+1+1+1+1      1+1+1+2 *4      1+2+2 *3 ---8种  n随便为多少,都有一个全1的情况。然后剩下的可两两1结合,分奇偶?    醉了,这还在用数学的方式思考!!!傻子!!要变换思维了啊!!重新思考(参考了书):  n > 2的时候,第一次跳可选择跳1级,或者2级。  跳1级:那剩下的n-1级台阶,就是f(n-1)种跳法  跳2级:那剩下的n-2级台阶,就是f(n-2)种跳法  -> f(n) = f(n-1) + f(n-2)  -> 斐波那契!!!! class Solution: def jumpFloor(self, number): first = 1 second = 2 num = 0 if number == 1: return 1 elif number == 2: return 2 else: for i in range(2,

10、斐波那契数列

微笑、不失礼 提交于 2019-12-03 14:55:06
要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 解法一:递归解法,但递归解法有很严重的效率问题,因为递归解法中重复的计算太多。 解法二:循环实现,避免重复计算,把已经得到的数列中间项保存起来。 public class Solution { public int Fibonacci(int n) { if(n <= 0) return 0; if(n == 1) return 1; int a = 0, b = 1, sum = 0; for(int i = 2; i< n; i++){ sum = a + b; a = b; b = sum; } return a + b; } } 斐波那契数列的应用 青蛙跳台阶问题 一只青蛙一次可以跳上一阶台阶,也可以跳上二阶台阶,求该青蛙跳上一个N阶的台阶总共有多少种跳法。 扩展: 一只青蛙一次可以跳上一阶台阶,也可以跳上两阶......也可以跳上N阶,此刻该青蛙跳上一个N阶的台阶共有多少种跳法? 来源: https://www.cnblogs.com/Aug-20/p/11801158.html

算法题/青蛙跳台阶问题

末鹿安然 提交于 2019-12-03 04:28:05
python2.7 问题一:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 f (n) = f (n- 1 ) = 1 n =1 f (n) = 1+1 = 2 n =2 当第一次跳一个台阶时,有一种方法,当第一次跳两个台阶时有一种方法 f (n) = 2+1 =3 n =3 当第一次跳一个台阶时有 f ( 3 - 1 ) 中方法,当第一次跳两个台阶时有 f ( 3 - 2 ) 中方法 因此, f (n) = f (n- 1 ) + f (n- 2 ) n >2 问题二:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 f (n) = f (n- 1 ) = 1 n =1 f (n) = 1+1 = 2 n =2 当第一次跳一个台阶时,有一种方法,当第一次跳两个台阶时有一种方法 f (n) = 2+1 =3 n =3 当第一次跳一个台阶时有 f ( 3 - 1 ) 种方法,当第一次跳两个台阶时有 f ( 3 - 2 ) 种方法,当第一次跳3个台阶时有1种跳法 因此 f (n) = f (n- 1 ) + f (n- 2 ) +...... f ( 1 )+ 1 种跳法 f (n- 1 ) = f (n- 2 )+ f (n- 3 )+..... f ( 1 )+ 1 f (n)

剑指offer----青蛙跳台阶的解析与实现

天涯浪子 提交于 2019-12-03 04:24:38
(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。 (2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法? 问题一 分析:当n=1,有一种跳法 当n=2,一次跳一个跳两次,一次跳两个跳一次,共两种跳法 当n>=2时,n个台阶,设有F(n)种跳法 (1)若第一次选择跳1个台阶,那么剩下的n-1个台阶有F(n-1)种跳法 (2)若第一次选中跳2个台阶,那么剩下的n-2个台阶有F(n-2)种跳法 所以当有n个台阶时 F(n) = F(n-1)+F(n-2)种跳法。 此问题可以归结为斐波那契数列问题(需要注意的是斐波那契数列的第二项是1,此问题当n=2时是2) 实现方式有两种 (1)迭代 建议使用该方法 牛客网运行时间显示为32ms public int JumpFloor(int target) { int first = 1; int second = 2; int result = 0; if(target==1 || target== 2) { return target; } else { for(int i = 3; i <= target; i++) { result = first + second; first = second; second =

递归和循环----青蛙跳台阶

戏子无情 提交于 2019-12-03 04:24:26
青蛙跳台阶 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法? 思路: 只有1级台阶,只有一种跳法 如果有2级台阶,那么就有两种跳法 如果有n(n>2)级台阶的话,n级台阶的跳法可以看成函数 f (n),那么第一次跳的时候有两种选择,一是跳1级,那么这种跳法的数目就等于 f (n-1)。二是跳2级的话,那么这种跳法的数目就等于 f (n-2)。所以n级台阶的跳法应该是等于 f (n-1) + f (n-2)。 /** * 递归写法 * 青蛙跳台阶 * @param n 几级台阶 * @return */ public static int frogStep(int n){ if (n == 1){ return 1; } if (n == 2){ return 2; } else{ return frogStep(n-1) + frogStep(n-2); } } /** * 循环写法 * @param n * @return */ public static int frogStepCycle(int n){ if (n ==1){ return 1; } if (n == 2){ return 2; } int FibOne = 1; int FibTwo = 1; int FibN = 0; for (int i = 1; i

蓝桥杯-历届试题 青蛙跳杯子

匿名 (未验证) 提交于 2019-12-02 23:34:01
问题描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。   X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。   如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。 *WWWBBB 其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。 X星的青蛙很有些癖好,它们只做3个动作之一:   1. 跳到相邻的空杯子里。   2. 隔着1只其它的青蛙(随便什么颜色)跳到空杯子里。   3. 隔着2只其它的青蛙(随便什么颜色)跳到空杯子里。 对于上图的局面,只要1步,就可跳成下图局面: WWW*BBB 本题的任务就是已知初始局面,询问至少需要几步,才能跳成另一个目标局面。 输入为2行,2个串,表示初始局面和目标局面。   输出要求为一个整数,表示至少需要多少步的青蛙跳。 样例输入 WWBB WWBB 样例输出 2 样例输入 WWW BBB BBB WWW 样例输出 10 数据规模和约定 我们约定,输入的串的长度不超过15 import java . util . HashMap ; import java . util . LinkedList ; import java . util . Map ; import java . util . Queue ; import java . util . Scanner ; public class

累死青蛙系列――青蛙跳台阶问题

匿名 (未验证) 提交于 2019-12-02 22:56:40
(1)斐波那契数列 f(1) = 1 f(2) = 2 f(n) = f(n-1) + f(n-2) function Fibonacci(n) { // write code here var a=[0,1 ]; if (n>1 ){ for ( var i=2;i<=n;i++ ){ a[i] =a[i-1]+a[i-2 ]; } } return a[n]; } (2)青蛙跳台阶 青蛙每次只能跳1个或2个台阶,有n阶台阶,青蛙有多少种跳法? 这样就将题目转变成斐波那契数列了。 function jumpFloor(number) { // write code here if (number<=0 ){ return -1 ; } else if (number==1 ){ return 1 ; } else if (number==2 ){ return 2 ; } else { return jumpFloor(number-1)+jumpFloor(number-2 ); } } (3)变态青蛙跳台阶 青蛙每次能跳1个或2个,……n个台阶,有n阶台阶青蛙有多少种跳法? 这题同样可以倒过来考虑 f(n) = f(n-1) + f(n-2) + ……+f(2) +f(1) +f(n-n) 但是这样不容易找到规律。所以我们这次采取从正面开始。 f(1) = 1 f(3) =

20191026-跳台阶

大兔子大兔子 提交于 2019-12-02 12:45:05
斐波那契数列 - 矩阵算法 \(O(lgn)\) - 待补充 跳台阶 - 经典问题 递归 - basic解法,浪费栈空间 动态规划 - 常规解法,转移方程可以有很多变化 打表 - 按照转移方程提前计算 注意 :台阶数很多的时候,需要 手写大数加法 变态跳台阶/观察法 跳石板/动态规划 爬楼梯/ 大数 跳台阶 爬楼梯2/ 大数加法 变态跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法 \(2^{n-1}\) 思路 思路1 青蛙一次可以跳1~n之间的台阶数,考虑如下情况 青蛙一次跳n阶,则1~n-1的所有台阶均不经过 青蛙第一次跳n-1阶,第二次跳1阶,等价于仅选中n-1阶 所以,观察可得,每种跳台阶方案都对应了1~n-1中的唯一一组选择 1~n-1共n-1级台阶,每级台阶都有选or不选两种情况 总的跳法数目为 \(2^{n-1}\) 思路2 \(f(n-1)=2^{n-2}\) 数学归纳法 \(f(n)=1+f(n-1)+f(n-2)+f(n-3)+...+f(2)+f(1)\) \(f(n)=2^{n-1}\) 跳石板 小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3....... 这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步

小工的锻炼

北城余情 提交于 2019-12-02 03:22:07
石头汤还是青蛙汤? 石头汤是士兵戏弄了村民,利用了村民的好奇心,使事物不断发展完善,最后达成了共赢;而青蛙汤是一开始将青蛙放在了冷水中,后来一点一点加热,温水煮青蛙,虽说达到了目的,但是对于青蛙确实最大的伤害。 真金不怕火来炼 编写程序必须要清楚,有的时候是没有选择的,对于软件的目的性,应用性,只有相应的应用人员才能说明一切,软件禁得住试验,能够满足相应的要求,特别是心脏起搏器,需求更加苛刻,要遵守相应的职业道德修养! 投资有风险 将资产比作知识,定期投资,以获得新的资产,将资产投于不同行业,获取多元化,并把风险降到最低,同时要在平时的时候看一看周边要兴起的行业,抓到先机,获得主动权,做到低买高卖,不断重新评估以往的职业,很可能会重新兴起。 来源: https://www.cnblogs.com/PSLQYZ/p/11728560.html