正文
1. 题目表述
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]输出:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
2.编写代码
class Solution { int[] tag; int[] temp; List<List<Integer>> permute=new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { tag = new int[nums.length]; temp = new int[nums.length]; int index = 0; for (int i = 0; i < nums.length; i++) { if (tag[i] == 0) { tag[i] = 1; temp[i] = nums[index]; permute(nums, index+1); tag[i] = 0; } } return permute; } private void permute(int[] nums, int i) { if (i < nums.length) { for (int j = 0; j < nums.length; j++) { if (tag[j] == 0) { tag[j] = 1; temp[j] = nums[i]; permute(nums, i+1); tag[j] = 0; } } }else { ArrayList<Integer> objects = new ArrayList<>(); for (int j = 0; j < nums.length; j++) { objects.add(temp[j]); } permute.add(objects); //System.out.println(Arrays.toString(temp)); } } }
3. 代码的思路
该题求解的是全排列,思考了一下,我发现可以用标记数组
以及中间数组
的方式就可以解决我们的问题,在用递归的方式即可解答。
运行结果: