【Leetcode】爬楼梯
问题:
爬n阶楼梯,每次只能走1阶或者2阶,计算有多少种走法。
暴力计算+记忆化递归。
从位置 i 出发,每次走1阶或者2阶台阶,记录从位置 i 出发到目标 n 所有的走法数量,memoA[i] 。记录的数据可以重复使用,避免冗余计算。
时间复杂度:O(n)。每次计算从 i 位置出发到终点 n 的走法,共计算 n 次,即树形递归的大小为n。
空间复杂度:O(n)。使用了长度为 n 的数组。
clock_t start1, end1;
class Solution {
public:
int climbStairs(int n) {
int memo[n+] = {};
start1 = clock();
int result = climb_stairs(, n, memo);
end1 = clock();
cout << "cost time = " << (double)(end1 - start1) / CLOCKS_PER_SEC << endl;
return result;
}
int climb_stairs(int i, int nums, int memoA[]) {
if (i > nums)
return ;
if (i == nums)
return ;
if (memoA[i] > )
return memoA[i];
memoA[i] = climb_stairs(i+, nums, memoA) + climb_stairs(i+, nums, memoA);
return memoA[i];
}
};
动态规划
动态规划的关键步骤在于构建递归函数。由于第n级阶梯可由第n-1级(跨一步)和第n-2级(跨两步)到达。记 f(n) 为到达第n级阶梯的方案数量,则有递归函数 f(n) = f(n-1)+f(n-2).
1)动态规划第一种实现方法:
时间复杂度:O(2^n)。其运算过程就是一个完全二叉树的展开,共有 2^(n-2)+1 个节点,即递归运算了 2^(n-2)+1 次。
空间复杂度:O(n)。递归深度达到n层。
class Solution {
public:
int climbStairs(int n) {
if (n == )
return ;
if (n == )
return ;
int sumMethod = climbStairs(n-) + climbStairs(n-);
return sumMethod;
}
};
2)动态规划第二种实现方法:
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public:
int climbStairs(int n) {
if (n == )
return ;
int memo[n+] = {};
memo[] = ;
memo[] = ;
for(int i = ; i <= n; ++i) {
memo[i] = memo[i-] + memo[i-];
}
return memo[n];
}
};
斐波那契数
将动态规划的第二种实现方法进行修改。第一项为1,第二项为2,斐波那契数的计算公式如下:
fib(n) = fib(n-1)+fib(n-2)。
时间复杂度:O(n)
空间复杂度:O(1)
还存在时间复杂度为 O(log(n)) 的算法,其核心思想为直接找到第n个斐波那契数,而非进行遍历计算。
这就是算法的魅力。从暴力求解开始,逐步优化算法流程,砍掉冗余的计算步骤,尽可能去除遍历步骤。最终达到提升时间复杂度和空间复杂度的目的。
【Leetcode】爬楼梯的更多相关文章
- 70.LeetCode爬楼梯
爬楼梯 点击标题可跳转到官网进行查看 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: ...
- 水leetcode 爬楼梯
public class Solution { public int climbStairs(int n) { if(n==1) return 1; if(n==2) return 2; int pr ...
- LeetCode初级算法--动态规划01:爬楼梯
LeetCode初级算法--动态规划01:爬楼梯 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...
- 【LeetCode】746. 使用最小花费爬楼梯
使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始). 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或 ...
- [LeetCode] 70. Climbing Stairs 爬楼梯问题
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- LeetCode 70. 爬楼梯(Climbing Stairs)
70. 爬楼梯 70. Climbing Stairs 题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 ...
- LeetCode 746. 使用最小花费爬楼梯(Min Cost Climbing Stairs) 11
746. 使用最小花费爬楼梯 746. Min Cost Climbing Stairs 题目描述 数组的每个索引做为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i].(索引从 0 ...
- Leetcode之动态规划(DP)专题-746. 使用最小花费爬楼梯(Min Cost Climbing Stairs)
Leetcode之动态规划(DP)专题-746. 使用最小花费爬楼梯(Min Cost Climbing Stairs) 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost ...
- Leetcode#70. Climbing Stairs(爬楼梯)
题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...
- LeetCode 70 - 爬楼梯 - [递推+滚动优化]
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ...
随机推荐
- shiro登陆认证
1.LoginController @RequestMapping(method = RequestMethod.POST) public String login(User user, HttpSe ...
- redhat java配置
原来的java版本为1.4 whereis java后 将java原来的目录全部删除 拿来新的1.8的安装好的java包 vi /etc/profile插入 JAVA_HOME=/usr/local/ ...
- Linux小技巧:du -sh * —— 查询文件目录大小
du -ach * #这个能看到当前目录下的所有文件占用磁盘大小和总大小 du -sh #查看当前目录总大小 du -sh * #查看所有子目录大小 du -sh ./* #查看当前目录下所有文件/文 ...
- hive udf编程教程
hive udf编程教程 https://blog.csdn.net/u010376788/article/details/50532166
- poj2478(欧拉函数)
题目链接:https://vjudge.net/problem/POJ-2478 题意:给定n,输出集合中元素的数量,集合中的元素为最简小于1的分数,分子分母均属于[1,n-1]. 思路:理清题意后就 ...
- poj1220(短除法实现任意进制转换)
题目链接:https://vjudge.net/problem/POJ-1220 题意:给定a进制的大数s,将其转换为b进制.其中2<=a,b<=62. 题意:一般进制转换是以10进制为中 ...
- 【五一qbxt】test2
又犯了一些迷之错误??要不然yy鼠标就是我的了 1.Superman: 小姐姐的题解:直接用set模拟即可emmmm 里面有很多指针啊,乱七八糟的,不会qwq,先看看我的大模拟吧: #include& ...
- 洛谷 P2398 GCD SUM 题解
题面 挺有意思的. 设f[i]表示gcd(i,j)=i的个数,g[i]表示k|gcd(i,j)的个数; g[i]=(n/i)*(n/i); g[i]=f[i]+f[2i]+f[3i]+...; 所以f ...
- Vue源码解读-构造函数
src/core/instance/index.js此文件主要实现了Vue初始化 // 引入模块 import { initMixin } from './init' import { stateMi ...
- 20.AutoMapper 之理解你的映射(Understanding Your Mappings)
https://www.jianshu.com/p/4f5c14fbf1c2 理解你的映射(Understanding Your Mappings) AutoMapper 为你的映射创建执行计划.在调 ...