题解 | #有重复项数字的全排列#
有重复项数字的全排列
https://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863
只能通过【1,2】数组,来理解,整个过程,mark[i]在每一次,寻找到一个排列时,都是全部为true的,调试的结果。
如果是三个数组,也是一样道理的。
import java.util.*;
public class Solution {
Boolean[] mark;
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num int整型一维数组
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> permuteUnique (int[] num) {
if(num==null) return res;
LinkedList<Integer> output = new LinkedList<>();
Arrays.sort(num);
mark = new Boolean[num.length];
Arrays.fill(mark, false);
backtrack(output, num);
return res;
}
public void backtrack(LinkedList<Integer> output, int[] num) {
if(num.length == output.size()) {
res.add(new ArrayList<Integer>(output));
return;
}
for(int i=0; i<num.length; i++) {
if(mark[i] || (i>0 && num[i]==num[i-1] && !mark[i-1])) {
continue;
}
mark[i] = true;
output.add(num[i]);
backtrack(output, num);
output.removeLast();
mark[i] = false;
}
}
}
查看20道真题和解析