zoukankan      html  css  js  c++  java
  • 剑指offer JZ-9

    题目描述

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

    输入

    复制
    3

    返回值

    复制
    4

    思路

    JZ-8的简单变形,定义dp[k]为到达第k阶台阶的方案数

    不难看出:dp[k] = dp[1] + dp[2] + dp[3] + .... + dp[k-1] + 1

    后面的+1 实际上就是一次跳k阶这一种方案

    动态规划代码如下

    class Solution {
    public:
        int jumpFloorII(int number) {
            if(number == 1) return 1;
            if(number == 2) return 2;
            vector<int> dp;
            dp.push_back(1);
            dp.push_back(1);
            dp.push_back(2);
            for(int i=3;i<=number;i++)
            {
                int sum = 0;
                for(int j=0;j<i;j++)
                    sum += dp[j];
                dp.push_back(sum);
            }
            return dp[number];
        }
    };
    View Code

    观察代码,我们 【dp[k] = dp[1] + dp[2] + dp[3] + .... + dp[k-1] + 1】这一部分的计算有重复

    为了节约时间和空间,我们可以用一个变量sum来记录dp[1] + dp[2] + dp[3] + .... + dp[k-1] + 1

    class Solution {
    public:
        int jumpFloorII(int number) {
            if(number == 1) return 1;
            if(number == 2) return 2;
            int sum = 4, now = 0;
            for(int i=3;i<=number;i++)
            {
                now = sum;
                sum += now;
            }
            return now;
        }
    };
    View Code
  • 相关阅读:
    程序员面试金典-整数对查找
    hihocoder-1552-缺失的拼图
    论文: YOLO9000-Better,Faster,Stronger
    hihocoder-1524-逆序对
    hihocoder-1546-集合计数
    hihocoder-1543-SCI表示法
    Oracle中的定时任务JOB
    JS中时间戳处理
    Boostrap小技巧
    Struts标签 logic:iterate简单使用
  • 原文地址:https://www.cnblogs.com/alan-W/p/14227456.html
Copyright © 2011-2022 走看看