leetcode分类刷题(续2)
Posted Panda_cv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode分类刷题(续2)相关的知识,希望对你有一定的参考价值。
leetcode分类刷题
1. 递归
函数直接或者间接调用自己
四个要素:接受的参数,返回值,终止条件,递归拆解
1.1 leetcode509 斐波拉契数列
1.2 leetcode206 反转链表
//伪代码
function(head){
if(head == null or head.next == null )
return head;
p = function(head.next);
head.next.next = head;
head.next = null;
return p;
}
1.3 leetcode344 反转字符串
双指针互换
2. 分治法
概念:大问题切割成一个个小问题,再合并
2.1 归并排序
2.2 leetcode169 多数元素
2.3 leetcode53 最大子序和
连续子数组
子数组
2.4 leetcode215 数组中k大元素
3. 回溯法
概念:类似枚举,一层一层向下递归,尝试搜索答案
找到答案: 返回答案或者尝试别的可能
找不到答案:返回上一层递归,尝试别的路径
组合问题:
回溯算法:求组合问题!
回溯算法:组合问题再剪剪枝
回溯算法:求组合总和!
回溯算法:电话号码的字母组合
回溯算法:求组合总和(二)
回溯算法:求组合总和(三)
分割问题:
回溯算法:分割回文串
回溯算法:复原IP地址
3.1 leetcode78 子集(模板)
找到所有子集
1. 扩展法 一个一个数扩展
2. 回溯法
3. DFS
- 回溯法
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<Integer> list = new ArrayList<Integer>();
List<List<Integer>> ans = new LinkedList<List<Integer>>();
ans.add(new ArrayList<>());
if(nums.length == 0){
return ans;
}
for(int i = 1; i<=nums.length; i++){
backtracking(nums,ans,i,0,new ArrayList<>());
}
return ans;
}
private void backtracking(int[] nums,List<List<Integer>> ans,int length,int index,List<Integer> subset){
if(subset.size() == length){
List<Integer> temp = new ArrayList<>(subset);
ans.add(temp);
return;
}
for(int i = index;i<nums.length;i++){
subset.add(nums[i]);
backtracking(nums,ans,length,i+1,subset);
subset.remove(subset.size()-1);
}
}
}
3.2 leetcode22 括号生成
3.3 leetcode77 组合
3.4 leetcode46 全排列
3.5 leetcode17 电话号码的字母组合
4. DFS
4.1 leetcode78 子集
//深度遍历---也是一种递归,一条路走到底。
以上是关于leetcode分类刷题(续2)的主要内容,如果未能解决你的问题,请参考以下文章