zoukankan      html  css  js  c++  java
  • 剑指offer(10)变态跳台阶

    题目描述

    一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
    解法:
    设青蛙跳上n级台阶有f(n)中方式,则
    f(n) =f(n-1)+ f(n-2)+...+f(2)+f(1)+f(0):(f(n-1)为第一次跳了1个台阶,剩下n-1个台阶有f(n-1)中跳法,以此类推。)
    f(n-1) = f(n-2)+...+f(2)+f(1)+f(0)
    那么f(n)=f(n-1)+f(n-1)=2*f(n-1):因此得到递归公式:
        1             n = 1
    f(n)=      2*f(n-1)     n>1
    class Solution {
    public:
        int jumpFloorII(int number) {
            if(number == 1)
                return 1;
            else
                return 2*jumpFloorII(number-1);
        }
    };
     
    排列组合解法:
    第n个台阶一定要跳,其余n-1个台阶可以选择跳或者不跳,两种可能,那就一共是2^(n-1)中可能性
     
    class Solution {
    public:
        int jumpFloorII(int number) {
            return 1<<--number;
        }
    };

    最开始的解法:直接使用了这个公式f(n) =f(n-1)+ f(n-2)+...+f(2)+f(1)+f(0)

    class Solution {
    public:
        int jumpFloorII(int number) {
            int * f = new int[number+1];
            memset(f, 0, sizeof(f));
            f[0] = 1;
            for(int i=1;i<=number;i++){
                for(int j=0;j<i;j++){
                    f[i] += f[j];
                }
            }
            return f[number];
        }
    };

     对于这种题目也可以写出数列找规律。

  • 相关阅读:
    canvas 画一个钟表
    .net防止写文件线程冲突
    .net中params以前没关注过的一个现象
    dom属性和特性
    数组常用方法
    新手配置vux
    改变placeholder的字体颜色大小
    设置cookie,删除cookie,读取cookie
    css 画三角形
    audio元素和video元素在ios和andriod中无法自动播放
  • 原文地址:https://www.cnblogs.com/ttzz/p/13702439.html
Copyright © 2011-2022 走看看