力扣(Leecode)-回溯法-求所有子集-Java

和全排列不一樣的點在於,全排列的時候每個點必須選,而此時,可以選,可以不選。

 

import java.util.*;
public class test {
    
    public static void main(String[] args) {
        int[] nums = {1,2,3};
        List<List<Integer>> myres = subsets(nums);
        System.out.println(myres);
    }
    public static List<List<Integer>> res = new LinkedList<>();
    public static List<List<Integer>> subsets(int[] nums) {
        backtracks(nums, 0, new LinkedList<>());
        return res;
    }

    //遞歸遍歷數組,每到一個元素就有兩種情況:1.選該元素 2.不選該元素
    public static void backtracks(int[] nums, int current, LinkedList<Integer> track) {
        //已經遍歷完所有元素
        if (current == nums.length) {
            res.add(new LinkedList<>(track));
            return;
        }

        //不選當前元素
        backtracks(nums, current + 1, track);
        //選當前元素
        track.add(nums[current]);
        backtracks(nums, current + 1, track);
        //撤銷選取當前元素(回溯)
        track.removeLast();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章