46. 全排列 - LeetCode

46. 全排列

题目链接

dfs

  • 用marked标记这个数是否被选过
  • 用now存储已选中的数
class Solution {
    List<List<Integer>> ans;

    public List<List<Integer>> permute(int[] nums) {
        ans = new ArrayList<>();
        int len = nums.length;
        dfs(nums, new boolean[len], new ArrayList<Integer>());
        return ans;
    }

    private void dfs(int[] nums, boolean[] marked, List<Integer> now){
        int len = nums.length;
        if(now.size() == len){
            ans.add(new ArrayList<Integer>(now));
            return;
        }
        for(int i = 0; i < len; i++)
            if(!marked[i]){
                marked[i] = true;
                now.add(nums[i]);
                dfs(nums, marked, now);
                marked[i] = false;
                now.remove(now.size() - 1);
            }
    }
}
posted @ 2021-03-03 10:25  一天到晚睡觉的鱼  阅读(27)  评论(0)    收藏  举报