Backtracking - Swap - LeetCode Official (4ms 90.37%)
classSolution {publicvoidbacktrack(int n,ArrayList<Integer> nums,List<List<Integer>> output,int first) {// if all integers are used upif (first == n)output.add(newArrayList<Integer>(nums));for (int i = first; i < n; i++) {// place i-th integer first // in the current permutationCollections.swap(nums, first, i);// use next integers to complete the permutationsbacktrack(n, nums, output, first +1);// backtrackCollections.swap(nums, first, i); } }publicList<List<Integer>> permute(int[] nums) {// init output listList<List<Integer>> output =newLinkedList();// convert nums into list since the output is a list of listsArrayList<Integer> nums_lst =newArrayList<Integer>();for (int num : nums)nums_lst.add(num);int n =nums.length;backtrack(n, nums_lst, output,0);return output; }}
Time complexity : O(N!) to build N! solutions.
Space complexity : O(N!) since one has to keep N! solutions.