[剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖

跳台阶

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

class Solution {
    public:
        int jumpFloor(int number) {

            if(number == 1)
                return 1;
            if(number == 2)
                return 2;

            int n1 = 1;
            int n2 = 2;
            int rtn = 0;
            for(int i = 3; i <= number; i++)
            {
                rtn = n1 + n2;
                n1 = n2;
                n2 = rtn;
            }
            return rtn;
        }
};

变态跳台阶

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

class Solution {
public:
        /*分析:
        num = 1,rtn[1] = 1;
        num = 2,rtn[2] = 2;
        num = 3,rtn[3] = rtn[1] + rtn[2] + 1 = 4;
        num = 4,rtn[4] = rtn[1] + rtn[2] + rtn[3] + 1 = 8;
        num = n,rtn[n] = rtn[1] + rtn[2] + ... + rtn[n-1] + 1 = 2^(n-1)
        */
        int jumpFloorII(int number) {

            return pow(2, number -1);

        }
};

矩形覆盖

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?。

     /*Analysis:
        最后竖着放一个时,之前的方法是f[n-1]
        最后横着放两个是,之前的方法是f[n-2]
        so f[n] = f[n-1] + f[n-2];
        */
        int rectCover(int number) {
            if(number == 1)
                return 1;
            if(number == 2)
                return 2;

            int n1 = 1;
            int n2 = 2;
            int rtn = 0;
            for(int i = 3; i <= number; i++)
            {
                rtn = n1 + n2;
                n1 = n2;
                n2 = rtn;
            }
            return rtn;
        }
时间: 2024-11-03 22:02:34

[剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖的相关文章

剑指offer斐波那契数列python

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 思路 斐波那契数列,即第n项为第n-1项和n-2项的和,可用递归,但复杂度高.直接用一个数组保存之前的项即可. 代码 1 # -*- coding:utf-8 -*- 2 class Solution: 3 def Fibonacci(self, n): 4 ans = [0,1,1,2] 5 while n > len(ans) - 1: 6 ans.append(a

剑指offer7: 斐波那契数列第n项(从0开始,第0项为0)

1. 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 2. 思路和方法 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1.1.2.3.5.8.13.21.34.……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1

剑指offer 斐波那契系列

目录 T9-斐波那契用迭代 跳台阶 动规 py2 变态跳台阶 wo的初始迭代方法 数学--移位 py2 矩形覆盖 动规 Py2 T9-斐波那契用迭代 跳台阶 动规 py2 # -*- coding:utf-8 -*- class Solution: def jumpFloor(self, number): # write code here if number<0: return -1 if number <=2: return number a,b=1,2 res = 0 for i in

剑指Offer07 斐波那契数列

1 /************************************************************************* 2 > File Name: 07_Fibonacci.c 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月29日 星期一 20时23分54秒 6 *****************************************

剑指offer-旋转数组,斐波那契数列,比特1的个数

旋转数组 描述 将有序数组的前n个数移到数组最后称为旋转数组.求数组中最小的元素. 思路 顺序查找时间复杂度为O(n),序列分为两段,两段都是有序的,且大多数情况下第一段的数大于第二段,这就可以用二分查找,如[3,4,5,1,2] ,当index1+1=index2时,nums[index2]为所要找的数.但是也有特殊情况,如[0,1,0,0,0],index1,index2和mid指向的数字大小相同,此时只能顺序查找. 代码: def find_min_num(nums): if not nu

10、斐波那契数列

要求输入一个整数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

【剑指offer】斐波那契数列

题目1描述: 写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列的定义如下: f(n) = 0 (n = 0);  f(n) = 1 (n = 1);  f(n) = f(n-1)+f(n-2) (n > 1); 分析描述: 在大多数的C语言教科书中,一般会用递归求斐波那契数列.代码如下: long long Fibonacci(unsigned int n) { if(n <= 0) return 0; if(n <= 1) return 1; return Fibonacci(

剑指offer编程题Java实现——面试题9斐波那契数列

题目:写一个函数,输入n,求斐波那契数列的第n项. 1 package Solution; 2 3 /** 4 * 剑指offer面试题9:斐波那契数列 5 * 题目:写一个函数,输入n,求斐波那契数列的第n项. 6 * 0, n=1 7 * 斐波那契数列定义如下:f(n)= 1, n=2 8 * f(n-1)+f(n-2), n>2 9 * @author GL 10 * 11 */ 12 public class No9Fibonacci { 13 14 public static void

剑指offer (9) 递归和迭代 斐波那契数列

通常基于递归实现的代码比基于循环实现的代码要简洁很多 比如 二叉树遍历以及 二叉树的许多操作 递归由于是函数调用自身,每一次函数调用,都需要在内存栈中分配空间以保存参数.返回地址以及临时变量 而每个进程的栈容量是有限的,当递归调用的层级太多时,就会导致 调用栈溢出 递归有时伴随大量重复的计算, 二叉树遍历的递归操作不存在重复计算,因为每个结点的左右子树是严格区分开的 例如求解 斐波那契数列: 解题分析 int fib(int n) { assert(n >= 0); int prevTwo =