今日算法10-变态跳台阶

一、题目描述

题目链接:牛客网

难易程度:简单

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

二、解题思路

动态规划

动态规划算法的基本思想是:将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子问题的解得到原问题的解;

对于重复出现的子问题,只在第一次遇到的时候对它进行求解,并把答案保存起来,让以后再次遇到时直接引用答案,不必重新求解。动态规划算法将问题的解决方案视为一系列决策的结果。

跳上 n-1 级台阶,可以从 n-2 级跳 1 级上去,也可以从 n-3 级跳 2 级上去...,那么

scss 复制代码
 f(n-1) = f(n-2) + f(n-3) + ... + f(0)

同样,跳上 n 级台阶,可以从 n-1 级跳 1 级上去,也可以从 n-2 级跳 2 级上去... ,那么

scss 复制代码
 f(n) = f(n-1) + f(n-2) + ... + f(0)

综上可得

scss 复制代码
 f(n) - f(n-1) = f(n-1)

scss 复制代码
 f(n) = 2*f(n-1)

f(1) 和 f(2) 可以提前算出来:

scss 复制代码
 f(1) = 1
 f(2) = 2

复杂度分析

时间复杂度 O(N) :计算 f(n) 需循环 n 次,每轮循环内计算操作使用 O(1) 。

空间复杂度 O(1) : 几个标志变量使用常数大小的额外空间。

三、代码实现

ini 复制代码
 public int jumpFloorII(int target) {
     int[] dp = new int[target + 1];
     //初始化前面两个
     dp[1] = 1;
     dp[2] = 2;
     //依次乘2
     for(int i = 3; i <= target; i++)
         dp[i] = 2 * dp[i - 1];
     return dp[target];
 }

推荐阅读

封面

今日算法系列,题解更新地址:studeyang.tech/2023/0731.h...

相关推荐
玄冥剑尊35 分钟前
贪心算法进阶
算法·贪心算法
玄冥剑尊38 分钟前
贪心算法深化 I
算法·贪心算法
52Hz11841 分钟前
力扣73.矩阵置零、54.螺旋矩阵、48.旋转图像
python·算法·leetcode·矩阵
BHXDML44 分钟前
第一章:线性回归& 逻辑回归
算法·逻辑回归·线性回归
iAkuya1 小时前
(leetcode)力扣100 二叉搜索树种第K小的元素(中序遍历||记录子树的节点数)
算法·leetcode·职场和发展
Remember_9932 小时前
【LeetCode精选算法】滑动窗口专题二
java·开发语言·数据结构·算法·leetcode
Gorgous—l3 小时前
数据结构算法学习:LeetCode热题100-动态规划篇(下)(单词拆分、最长递增子序列、乘积最大子数组、分割等和子集、最长有效括号)
数据结构·学习·算法
北京地铁1号线4 小时前
2.3 相似度算法详解:Cosine Similarity 与 Euclidean Distance
算法·余弦相似度
Remember_9934 小时前
【LeetCode精选算法】滑动窗口专题一
java·数据结构·算法·leetcode·哈希算法
小饼干超人4 小时前
详解向量数据库中的PQ算法(Product Quantization)
人工智能·算法·机器学习