标签:
Given a list of numbers, return all possible permutations.
For nums = [1,2,3]
, the permutations are:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
Do it without recursion.
SOLUTION 1:
递归
permutations的题,跟subsets基本上是差不多的,只是在往result里加list时候,并不是加入子集而是加入全排列,所以要加入一些条件,list size等于nums的size才可以加入。
class Solution { /** * @param nums: A list of integers. * @return: A list of permutations. */ public ArrayList<ArrayList<Integer>> permute(ArrayList<Integer> nums) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); if (nums == null || nums.size() == 0){ return result; } ArrayList<Integer> list = new ArrayList<Integer>(); helper(result, list, nums); return result; } private void helper(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> list, ArrayList<Integer> nums){ if (list.size() == nums.size()){ result.add(new ArrayList<Integer>(list)); return; } for (int i = 0; i < nums.size(); i++){ if (list.contains(nums.get(i))){ continue; } list.add(nums.get(i)); helper(result, list, nums); list.remove(list.size() - 1); } } }
SOLUTION 2:
非递归
非递归,用的九章的答案,基本思路,用stack模拟DFS过程。背诵吧就。
class Solution { /** * @param nums: A list of integers. * @return: A list of permutations. */ public ArrayList<ArrayList<Integer>> permute(ArrayList<Integer> nums) { ArrayList<ArrayList<Integer>> permutations = new ArrayList<ArrayList<Integer>>(); if (nums == null || nums.size() == 0) { return permutations; } int n = nums.size(); ArrayList<Integer> stack = new ArrayList<Integer>(); stack.add(-1); while (stack.size() != 0) { Integer last = stack.get(stack.size() - 1); stack.remove(stack.size() - 1); // increase the last number int next = -1; for (int i = last + 1; i < n; i++) { if (!stack.contains(i)) { next = i; break; } } if (next == -1) { continue; } // generate the next permutation stack.add(next); for (int i = 0; i < n; i++) { if (!stack.contains(i)) { stack.add(i); } } // copy to permutations set ArrayList<Integer> permutation = new ArrayList<Integer>(); for (int i = 0; i < n; i++) { permutation.add(nums.get(stack.get(i))); } permutations.add(permutation); } return permutations; } }
标签:
原文地址:http://www.cnblogs.com/tritritri/p/4919022.html