1. 程式人生 > >LeetCode 46. 全排列 Permutations

LeetCode 46. 全排列 Permutations

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); } }