LeetCode 46. 全排列 Permutations
阿新 • • 發佈:2018-11-12
8-3 排列問題 Permutations
題目: LeetCode 46. 全排列
給定一個沒有重複數字的序列,返回其所有可能的全排列。
示例:
輸入: [1,2,3]
輸出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
public class Solution {
private ArrayList<List< Integer>> res;
private boolean[] used;
public List<List<Integer>> permute(int[] nums) {
res = new ArrayList<List<Integer>>();
if(nums == null || nums.length == 0)
return res;
used = new boolean[nums.length];
LinkedList< Integer> p = new LinkedList<Integer>();
generatePermutation(nums, 0, p);
return res;
}
// p中儲存了一個有index-1個元素的排列。
// 向這個排列的末尾新增第index個元素, 獲得一個有index個元素的排列
private void generatePermutation(int[] nums, int index, LinkedList<Integer> p){
if(index == nums. length){
res.add((LinkedList<Integer>)p.clone());
return;
}
for(int i = 0 ; i < nums.length ; i ++)
if(!used[i]){
used[i] = true;
p.addLast(nums[i]);
generatePermutation(nums, index + 1, p );
p.removeLast();
used[i] = false;
}
return;
}
private static void printList(List<Integer> list){
for(Integer e: list)
System.out.print(e + " ");
System.out.println();
}
public static void main(String[] args) {
int[] nums = {1, 2, 3};
List<List<Integer>> res = (new Solution()).permute(nums);
for(List<Integer> list: res)
printList(list);
}
}