码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer JZ-9

时间:2021-01-06 12:34:01      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:item   hid   boa   view   示例   col   output   return   turn   

题目描述

一只青蛙一次可以跳上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

 

剑指offer JZ-9

标签:item   hid   boa   view   示例   col   output   return   turn   

原文地址:https://www.cnblogs.com/alan-W/p/14227456.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!