[LeetCode]46. 全排列(The whole arrangement) Java
阿新 • • 發佈:2018-11-19
一、題目:
給定一個沒有重複數字的序列,返回其所有可能的全排列。
示例:
輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
二、分析:
該題採用了回溯,剛開始接觸回溯,不太好理解,基本概念、基本思想、步驟等等,具體瞭解-->推薦部落格
三、Java程式碼:
public static List<List<Integer>> permute(int[] nums) { List<List<Integer>> listList = new ArrayList<>(); //開始回溯 backtracking(listList, nums, 0); return listList; } private static void backtracking(List<List<Integer>> listList, int[] nums, int j) { if (j == nums.length) { List<Integer> list = new ArrayList<>(); for (int num : nums) list.add(num); listList.add(list); } for (int i = j; i < nums.length; i++) { //i、j互換(剛開始自己跟自己換) swap(nums, i, j); //往上回溯 backtracking(listList, nums, j+1); //回溯完,i、j互換,一個迴圈結束,回到了最初的1,2,3 swap(nums, i, j); } } private static void swap(int[] nums, int m, int n) { int temp = nums[m]; nums[m] = nums[n]; nums[n] = temp; }
四、提交結果: