前言
###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.用最小花费爬楼梯
题目链接:746. 使用最小花费爬楼梯 - 力扣(LeetCode)
题面:
如果直接采取一般递归思路会超时,原因是递归了大量重复的层数,我们可以使用哈希表将每个第一次递归到的层数存一下,这样就不会超时了
哈希表代码:
java">class Solution {int[] cost;Map<Integer,Integer> map = new HashMap<>();public int minCostClimbingStairs(int[] cost) {this.cost = cost;return recursion(cost.length);}public int recursion(int u){if(u<=1)return 0;int flag = map.getOrDefault(u,-1);if(flag!=-1){return flag;}int res = Math.min(recursion(u-1)+cost[u-1],recursion(u-2)+cost[u-2]);map.put(u,res);return res;}
}
代码:
java">class Solution {public int minCostClimbingStairs(int[] cost) {int f0 = 0, f1 = 0;for (int i = 1; i < cost.length; i++) {int newF = Math.min(f1 + cost[i], f0 + cost[i - 1]);f0 = f1;f1 = newF;}return f1;}
}
后言
上面是数据结构相关的习题,下一篇文章会将其他相关的习题。