leetcode刷题
Posted Panda_Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode刷题相关的知识,希望对你有一定的参考价值。
1. leetcode 78 子集
1.1 扩展法:学会另外一种数组遍历
for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体
/* 建立一个数组 */
int[] integers = {1, 2, 3, 4};
/* 开始遍历 */
for (int i : integers) {
System.out.println(i); /* 依次输出“1”、“2”、“3”、“4” */
}
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<Integer> list = new ArrayList<>();
List<List<Integer>> ans = new LinkedList<>();
ans.add(list);
// 扩展法
for(int i = 0; i < nums.length; i++){
List<List<Integer>> temp = new ArrayList<>();
for(List<Integer> list1 : ans){
List<Integer> r = new ArrayList<>(list1);
r.add(nums[i]);
temp.add(r);
}
for(List<Integer> list2 : temp){
ans.add(list2);
}
}
return ans;
}
1.2 回溯法(掌握-回溯法的模板)
回溯法也是一种递归,递归有终止条件,每次回溯时需要删除刚访问的元素。
掌握:删除列表最后一个元素,List删除元素时,默认按索引删除,而不是对象删除
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);
}
}
}
以上是关于leetcode刷题的主要内容,如果未能解决你的问题,请参考以下文章