题目70.爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
用例
输入: 2
输出: 2
输入: 3
输出: 3
解题思路
考虑当用户最后登上最后一节台阶时,它的选择有两种:
- 从最后一阶台阶的前一阶台阶登上
- 从最后一阶台阶的前两阶台阶登上
- 可以写出其dp方程为:f(x)=f(x-1)+f(x-2)
比较高级的解法——构造如下的推导矩阵:
因此只要能够快速计算出矩阵M的n次幂,就可以求解结果,用快速幂的形式
通项公式求解:
代码
1 | class Solution { |
快速幂的矩阵形式
1 | public class Solution { |
1 | public class Solution { |
题目1.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
用例
给定 nums = [2, 7, 11, 15], target = 9
结果为:[0,1]
解题思路
利用hashmap或者排序并用双指针进行求解
代码
1 | class Solution { |
因为需要保存数字的位置,所以需要自己编写一个比较器
1 | class Solution{ |
题目15.三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
用例
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
解题思路
题目要求只需要求出数字组合就可以了,可以采用排序方式
代码
1 | class Solution { |
题目18.四数之和
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
用例
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
满足要求的四元组集合为:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
解题思路
排序并结合上面题目的思路进行分析
代码
1 | class Solution { |
发布时间: 2020-06-13
最后更新: 2020-06-13
本文标题: leetcode-day21
本文链接: http://huangketsudou.github.io/2020/06/13/leetcode-day21/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处