内容来自samhan
491. 非减子数列
给定一个整数数组 nums,返回给定数组中至少有两个元素的所有不同的可能非递减子序列。您可以按任何顺序返回答案。 内容来自zvvq
示例1:
zvvq.cn
输入:nums = [4,6,7,7]
内容来自samhan
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6, 7,7],[7,7]] copyright zvvq
示例2:输入:nums = [4,4,3,2,1]
内容来自zvvq
输出:[[4,4]]限制: zvvq
1 -100 原始页面
zvvq.cn
1 zvvq
2 zvvq好,好zvvq
3
zvvq
4 copyright zvvq
5 zvvq
6 本文来自zvvq
7 zvvq
8 本文来自zvvq
9 zvvq
10 内容来自zvvq,别采集哟
11
内容来自zvvq
12
13
14 zvvq好,好zvvq
15 内容来自zvvq
16
内容来自samhan
17
zvvq好,好zvvq
18
19 内容来自zvvq,别采集哟
20 内容来自samhan
21 内容来自samhan666
22 zvvq
23
24 zvvq
25
内容来自zvvq,别采集哟
26 内容来自zvvq
public List<list>> findSubsequences(int[] nums) { 内容来自samhan666
List<list>> list = new ArrayList(); zvvq好,好zvvq
List<integer> seq = new LinkedList();
内容来自samhan
Set<integer> set = new HashSet();
backTracking(列表, seq, nums, 0, 设置);
返回列表; zvvq.cn
} zvvq.cn
public void backTracking(List<list>>list, List<integer> seq, int[] nums, int start, Set<integer> set){ 内容来自samhan
if(start == nums.length){ 内容来自zvvq
返回;
}
for(int i=start; i<nums.length i if set.contains>= 1 && (nums[i] 1 && nums[i]>= seq.get(seq.size()-2)){
list.add(new ArrayList(seq));
}
内容来自samhan666
if(seq.size() == 1 || nums[i]>= seq.get(seq.size()-1)){ zvvq
backTracking(list,seq, nums, i+1, new HashSet()); zvvq好,好zvvq
}
内容来自samhan
// 回溯 zvvq
seq.remove(seq.size()-1);
zvvq好,好zvvq
}
} 内容来自zvvq
</nums.length></integer></integer></list></integer></integer></list></list>
46. 排列
给定一个由不同整数组成的数组 nums,返回所有可能的排列。您可以按任何顺序返回答案。
示例1:
内容来自samhan
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] 】
内容来自samhan
示例2:输入:nums = [0,1] 本文来自zvvq
输出:[[0,1],[1,0]] 内容来自samhan666
示例3:输入:nums = [1]
内容来自zvvq
输出:[[1]]限制: zvvq
1 -10 nums 的所有整数都是唯一的。
1 zvvq好,好zvvq
2
3 copyright zvvq
4
本文来自zvvq
5
6
copyright zvvq
7
copyright zvvq
8
9 本文来自zvvq
10
内容来自samhan666
11 zvvq
12
13
14 zvvq好,好zvvq
15 zvvq.cn
16 zvvq好,好zvvq
17
内容来自zvvq,别采集哟
18 copyright zvvq
19
20 内容来自samhan666
21 内容来自samhan666
22
内容来自samhan
23 内容来自samhan
24
zvvq.cn
25
26 内容来自zvvq
27 内容来自samhan666
28
29 zvvq好,好zvvq
public List<list>> permute(int[] nums) {
本文来自zvvq
List<list>> list = new ArrayList(); zvvq
List<integer> 排列 = new LinkedList(); 内容来自samhan666
Integer[] numsI = Arrays.stream(nums).boxed().toArray(Integer[]::new); 本文来自zvvq
List<integer> numList = new ArrayList(Arrays.asList(numsI));
backTracking(列表、排列、numList); copyright zvvq
返回列表;
} 内容来自samhan
public void backTracking(List<list>> list, List<integer> 排列, List<integer> nums){
copyright zvvq
if(nums.size()==0){ 内容来自zvvq,别采集哟
list.add(new ArrayList(排列));
返回;
}
内容来自samhan
for(int i=0; i<nums.size i permutation.add list> workNums = new ArrayList(nums); copyright zvvq
workNums.remove(Integer.valueOf(nums.get(i))); copyright zvvq
backTracking(列表、排列、workNums); 内容来自samhan
排列.删除(排列.size()-1);
} 内容来自zvvq,别采集哟
}
内容来自zvvq
</nums.size></integer></integer></list></integer></integer></list></list> 内容来自samhan666
47. 排列 II
给定可能包含重复项的数字 nums 集合,以任何顺序返回所有可能的唯一排列。
内容来自samhan
示例1: 内容来自zvvq,别采集哟
输入:nums = [1,1,2] 本文来自zvvq
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
内容来自zvvq,别采集哟
示例2:输入:nums = [1,2,3]
zvvq
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] 】限制: copyright zvvq
1 -10 原始页面
内容来自samhan
1 内容来自samhan666
2 zvvq
3
4 内容来自zvvq,别采集哟
5
6 内容来自samhan666
7 内容来自samhan666
8
zvvq
9 内容来自samhan666
10 内容来自samhan
11
内容来自samhan666
12
13
zvvq.cn
14 内容来自zvvq
15 内容来自samhan666
16 内容来自samhan666
17 内容来自zvvq,别采集哟
18 本文来自zvvq
List<list>> list = new ArrayList();
公共列表> permuteUnique(int[] nums) { 内容来自zvvq
List<integer> 排列 = new LinkedList();
int[] flags = new int[nums.length];
backTracking(排列、数字、标志);
内容来自samhan
返回列表;
zvvq.cn
} zvvq
public void backTracking(List<integer> permutation, int[] nums, int[] flags){
zvvq.cn
if(permutation.size() == nums.length){
copyright zvvq
list.add(new ArrayList(排列)); 内容来自samhan666
返回; zvvq
}
Set<integer> set = new HashSet();
本文来自zvvq
for(int i=0; i<nums.length i if set.contains int num="nums[i];" backtracking></nums.length></integer></integer></integer></list>
以上就是LeetCode DayBackTracking 第 4 部分的详细内容,更多请关注其它相关文章!