题解 | #没有重复项数字的全排列#
没有重复项数字的全排列
https://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1
思路
index 位置以后的数字都有机会来到 index 位置,递归求出所有可能的情况
CODE
import java.util.*; public class Solution { ArrayList> res = new ArrayList(); public ArrayList> permute(int[] num) { ArrayList list = new ArrayList(); process(num, 0, num.length, list); return res; } // nums[...index] 表示index之前已经做过选择,nums[index ...]表示index以后的位置可以来到index位置 private void process(int[] nums, int index, int N, ArrayList list) { if (index == N) { res.add(new ArrayList(list)); return; } for (int i = index; i < N; i++) { swap(nums, index, i); // 表明包含 index 以及 index 以后的数有机会来到 index 位置 list.add(nums[index]); // 将当前index位置的元素加入到list中 process(nums, index + 1, N, list); // 下一个位置的可能情况 list.remove(list.size() - 1); // 恢复现场 swap(nums, index, i); // 恢复现场 } } private void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }#算法题#