[ LintCode] Permutations
2015-10-28 23:12
295 查看
Permutations
Given a list of numbers, return all possible permutations.Example
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] ]
Challenge
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); } } }
View Code
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; } }
相关文章推荐
- 做空被套
- 开发中具体的加密思路
- Xargs用法详解
- RTP与RTCP协议介绍
- 多线程
- 匿名类的构造函数很特殊
- spring boot 使用h2数据库配置(内存模式)
- android:ems="10"的含义
- 杭电ACM-HDU1003-Max Sum
- Cleaning Shifts POJ - 2376(区间覆盖,排序+贪心)
- 巧建Spring Web的Maven项目来解决java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory
- kali——安装nessus
- Android摇一摇功能实现
- js小案例效果学习记录
- 线段树的构造
- commons.logging 和 log4j
- vimrc
- yii2视频教程
- TOP 10 开源的推荐系统简介
- UiDevice的UiObject的讲解