DFS解法的两道题 Leetcode 46 Permutations & Leetcode 78 Subset

Leetcode 78 Subset

Given a set of distinct integers, S, return all possible subsets.

Note:

  • Elements in a subset must be in non-descending order.
  • The solution set must not contain duplicate subsets.

For example,
If S = [1,2,3], a solution is:

[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

题目解析:这种返回all possible的题就可以用bfs的方法来解啦~思路是先把array排序(因为题里要求是non-descending)然后思路是从num里面依次读取数字,存到ArrayList<Integer>的list里面, 然后再把list存到ArrayList<ArrayList<Integer>>的res里顺序是这样的[], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3]记得边界检测
 1 public class Solution {
 2     public static List<List<Integer>> subsets(int[] S) {
 3         List<List<Integer>> res = new ArrayList<List<Integer>>();
 4         if(S == null || S.length == 0)
 5             return res;
 6         Arrays.sort(S);
 7         ArrayList<Integer> list = new ArrayList<Integer>();
 8         dfs(res, list, S, 0);
 9         return res;
10     }
11     public static void dfs(List<List<Integer>> res, ArrayList<Integer> list, int[] S, int pos){
12         res.add(new ArrayList<Integer>(list));
13         for(int i = pos; i < S.length; i++){
14             list.add(S[i]);
15             dfs(res, list, S, i+1);
16             list.remove(list.size() - 1);
17         }
18     }
19 }

Leetcode 46 Permutations

Given a collection of numbers, return all possible permutations.


For example,
[1,2,3] have the following permutations:
[1,2,3][1,3,2][2,1,3][2,3,1][3,1,2], and [3,2,1].

题目解析:

这道题更是典型的DFS啦~直接用DFS模型就好了~至于检测某个数组的element是否被使用了这种情况就新建一个boolean的数组进行检测就好了~

public class Solution {
    public static List<List<Integer>> permute(int[] num) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        ArrayList<Integer> list = new ArrayList<Integer>();
        boolean[] flag = new boolean[num.length];
        dfs(res, list, num, flag);
        return res;
    }
    public static void dfs(List<List<Integer>> res, ArrayList<Integer> list, int[] num, boolean[] flag){
        if(list.size() == num.length){
            res.add(new ArrayList<Integer>(list));
            return;
        }
        for(int i = 0; i < num.length; i++){
            if(!flag[i]){
                flag[i] = true;
                list.add(num[i]);
                dfs(res, list, num, flag);
                list.remove(list.size() - 1);
                flag[i] = false;
            }
        }
    }
}
时间: 2024-10-22 02:26:21

DFS解法的两道题 Leetcode 46 Permutations & Leetcode 78 Subset的相关文章

[Lintcode]15. Permutations/[Leetcode]46. Permutations

15. Permutations/46. Permutations 本题难度: Medium Topic: Search & Recursion Description Given a list of numbers, return all possible permutations. Example Example 1: Input: [1] Output: [ [1]] Example 2: Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3]

leetCode 46. Permutations 回溯问题 | Medium

46. Permutations(全排列问题--回溯问题经典) Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations: [   [1,2,3],   [1,3,2],   [2,1,3],   [2,3,1],   [3,1,2],   [3,2,1] ] 题目大意:求一个序列的全排列. 思路:做排列

leetcode 46 Permutations ----- java

Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 给定一个数组,求所有的排列组合. 做出这道题很简单,主要是要比较快的速度,第一次做,耗时5ms,比较慢,主要就是用递归,每次向arr

LeetCode 46 Permutations(全排列问题)

题目链接:https://leetcode.com/problems/permutations/?tab=Description Problem:给出一个数组(数组中的元素均不相同),求出这个数组能够产生的所有全排列 采用递归算法,传入参数 List<List<Integer>> list, List<Integer> tempList, int[] nums, boolean[] used 其中list保存最终结果 tempList保存其中一个全排列 nums为最初的

LeetCode 46 Permutations (全排列)

Given a collection of distinct numbers, return all possible permutations. For example, [1,2,3] have the following permutations: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 题目链接:https://leetcode.com/problems/permutations/ 题目大意:求全排列 题目分析:求

leetcode 46 Permutations Python 实现(回溯算法)

Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3]Output:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] 回溯算法自己的一个思路如下:需要保留数字使用情况,my_nums增加和删除元素等操作 1 class Solution: 2 def permute(self, nums: Li

LeetCode 46. Permutations

原题 Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 解题思路 递归:递归的方法,创建一个visit判断此值是否已经添加过,每一层不断地循环,加入没有被访问的元素,直到最后结果的长

LeetCode 46 Permutations II

Given a collection of numbers that might contain duplicates, return all possible unique permutations. For example, [1,1,2] have the following unique permutations: [1,1,2], [1,2,1], and [2,1,1]. 思路,使用字典序法,与http://blog.csdn.net/mlweixiao/article/detail

19.2.7 [LeetCode 46] Permutations

Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 1 class Solution { 2 public: 3 void build(vector<bool>visited, vector<int>nums,