题解 | #没有重复项数字的全排列#
没有重复项数字的全排列
https://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1
回溯方法 import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型一维数组 * @return int整型ArrayList<ArrayList<>> */ private void backtrack(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> temp,boolean[] used,int[] num){ if(temp.size() == used.length){ //若改为result.add(temp),则只会添加temp的引用,导致所有的result存储的均为同一个引用,并且这个存储的引用会随着temp的改变而改变 result.add(new ArrayList<>(temp)); }else{ for(int i = 0 ; i < num.length;i++){ if(!used[i]){ used[i]=true; temp.add(num[i]); backtrack(result,temp,used,num); temp.remove(temp.size() - 1); used[i] = false; } } } } public ArrayList<ArrayList<Integer>> permute (int[] num) { // write code here ArrayList<Integer> list = new ArrayList<>(); ArrayList<ArrayList<Integer>> result = new ArrayList<>(); backtrack(result,list,new boolean[num.length],num); return result; } }