题目
思路
思路:使用回溯来选择不同的分支以达到排列结果,但是如何知道那些结果已经使用过,就需要一个数组记录已使用的数据
代码
List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> permute(int[] nums) {boolean[] visited = new boolean[nums.length];recur(new ArrayList<>(), visited, nums);return res;}public void recur(List<Integer> cur, boolean[] visited, int[] nums) {if (cur.size() == nums.length) {res.add(cur);return;}for (int i = 0; i < nums.length; i++) {if (!visited[i]) {visited[i] = true;List<Integer> list = new ArrayList<>(cur);list.add(nums[i]);recur(list, visited, nums);visited[i] = false;}}}//修改一下写法public List<List<Integer>> permute(int[] nums) {List<List<Integer>> res = new ArrayList<>();recur(res, new ArrayList<>(), nums);return res;}public void recur(List<List<Integer>> res, List<Integer> cur, int[] nums) {if (cur.size() == nums.length) {res.add(new ArrayList<>(cur));return;}for (int i = 0; i < nums.length; i++) {if (nums[i] == Integer.MAX_VALUE) continue;cur.add(nums[i]);nums[i] = Integer.MAX_VALUE;recur(res, cur, nums);nums[i] = cur.remove(cur.size() - 1);}}
