|
1 | 1 | package com.leosanqing.leetcode.medium.list; |
2 | 2 |
|
| 3 | +import com.alibaba.fastjson.JSON; |
| 4 | + |
3 | 5 | import java.util.ArrayList; |
4 | 6 | import java.util.List; |
5 | 7 |
|
|
17 | 19 | */ |
18 | 20 | public class _78_subsets { |
19 | 21 | public static void main(String[] args) { |
20 | | - subsets(new int[]{1,2,3}); |
| 22 | + System.out.println(JSON.toJSONString(subsets(new int[]{1, 2, 3}))); |
21 | 23 | } |
22 | 24 |
|
| 25 | + /** |
| 26 | + * 这个真的太经典了,回溯的经典题型,你会发现有很多很多这种的题 |
| 27 | + * |
| 28 | + * @param nums |
| 29 | + * @return |
| 30 | + */ |
23 | 31 | public static List<List<Integer>> subsets(int[] nums) { |
24 | | - |
25 | 32 | List<List<Integer>> answer = new ArrayList<>(); |
26 | | - answer.add(new ArrayList<>()); |
27 | 33 |
|
28 | | - if (nums.length == 0) { |
29 | | - return answer; |
30 | | - } |
31 | | - for (int i = 1; i <= nums.length; i++) { |
32 | | - backTrace(answer, new ArrayList<>(), nums, i, 0); |
| 34 | + for (int i = 0; i <= nums.length; i++) { |
| 35 | + backtrace(answer, new ArrayList<>(), i, nums, 0); |
33 | 36 | } |
34 | 37 |
|
35 | 38 | return answer; |
36 | | - |
37 | 39 | } |
38 | 40 |
|
39 | | - /** |
40 | | - * 这个我已经不想说了,太多一样的解法了 |
41 | | - * @param answer |
42 | | - * @param list |
43 | | - * @param nums |
44 | | - * @param max |
45 | | - * @param position |
46 | | - */ |
47 | | - private static void backTrace(List<List<Integer>> answer, List<Integer> list, int[] nums, int max, int position) { |
| 41 | + private static void backtrace(List<List<Integer>> answer, List<Integer> list, int max, int[] nums, int position) { |
48 | 42 | if (list.size() == max) { |
49 | 43 | answer.add(new ArrayList<>(list)); |
50 | 44 | return; |
51 | 45 | } |
| 46 | + |
52 | 47 | for (int i = position; i < nums.length; i++) { |
53 | 48 | list.add(nums[i]); |
54 | | - |
55 | | - backTrace(answer, list, nums, max, i + 1); |
| 49 | + backtrace(answer, list, max, nums, i + 1); |
56 | 50 | list.remove(list.size() - 1); |
57 | 51 | } |
58 | 52 | } |
|
0 commit comments