/* * 给定一个 没有重复 数字的序列,返回其所有可能的全排列。例如[1,2,3],输出 * [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] * * */ import java.util.ArrayList; import java.util.List; public class Permutation { public List<List<Integer>> permute(int[] nums){ List<List<Integer>> res = new ArrayList<>(); int len = nums.length; if(len == 0){ return res; } //创建一个boolean集合来标记某个点是否被选择过 boolean[] used = new boolean[len]; List<Integer> path = new ArrayList<>(); dfs(nums, nums.length, 0,path,used,res); return res; } public void dfs(int[] nums, int len, int index, List<Integer> path, boolean[] used, List<List<Integer>> res){ if(index == len){ res.add(new ArrayList<>(path)); return; } for(int i = 0; i < len; i++){ if(!used[i]) { path.add(nums[i]); used[i] = true; dfs(nums, len, index + 1, path, used, res); used[i] = false; path.remove(path.size() - 1); } } } public static void main(String[] args) { int[] nums = {1, 2, 3}; Permutation p = new Permutation(); List<List<Integer>> lists = p.permute(nums); System.out.println(lists); } }
leetcode---全排列问题
最新推荐文章于 2022-08-19 20:32:10 发布