全排列问题
import java.util.*; //艺术性的代码 public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型一维数组 * @return int整型ArrayList<ArrayList<>> */ ArrayList<ArrayList<Integer>> res = new ArrayList<>(); public ArrayList<ArrayList<Integer>> permute (int[] num) { boolean[] used = new boolean[num.length]; for (int i = 0; i < num.length; i++){ used[i] = false; } Deque<Integer> deque = new ArrayDeque<>(); backTracking(num, used, deque); return res; } public void backTracking(int[] num, boolean[] used, Deque<Integer> deque){ //递归终止条件 if (deque.size() == num.length){ res.add(new ArrayList<>(deque)); return; } //从宏观上可以看出,这个循环会遍历数组中的所有元素,使数组中的每个元素都有资格作为起始点 for (int i = 0; i < num.length; i++){ if (used[i] == true){ continue; } used[i] = true; deque.addLast(num[i]); backTracking(num, used, deque); //进行回溯 used[i] = false; deque.removeLast(); } } }
}