LintCode——全排列
描述:给定一个数字列表,返回其所有可能的排列。
样例:给出一个列表[1,2,3],其全排列为:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
说明:分别使用递归和非递归实现
Java
1、递归
 public class Solution {
     /*
      * @param nums: A list of integers.
      * @return: A list of permutations.
      */
     public List<List<Integer>> permute(int[] nums) {
         List<List<Integer>> res = new ArrayList<>();
         if(nums == null)
             return res;
         if(nums.length == 0)
         {
             res.add(new ArrayList<Integer>());
             return res;
         }  
         ArrayList<Integer> list = new ArrayList<>();
         dfs(res, list, nums);
         return res;
    }  
     private void dfs(List<List<Integer>> res, ArrayList<Integer> list, int[] nums) {//深度优先  
         int n = nums.length;
         if(list.size() == n)
         {
             res.add(new ArrayList<Integer>(list));
             return;
         }  
         for(int i = 0;i < n;i++) {
             if(list.contains(nums[i]))
                 continue;
             list.add(nums[i]);
             dfs(res, list, nums);
             list.remove(list.size() - 1);
         }
     }
 }
2、非递归
 public class Solution {
     /*
      * @param nums: A list of integers.
      * @return: A list of permutations.
      */
     public List<List<Integer>> permute(int[] nums) {
         List<List<Integer>> res = new ArrayList<List<Integer>>();
         if(nums == null)
             return res;
         if( nums.length == 0){
             res.add(new ArrayList<Integer>());
             return res;
         }
         List<Integer> list = new ArrayList<>();
         list.add(nums[0]);
         res.add(new ArrayList<Integer>(list));  
         for(int i=1;i<nums.length;i++){
             int size1 = res.size();
             for(int j=0;j<size1;j++){
                 int size2 = res.get(0).size();
                 for(int k=0;k<=size2;k++){
                     ArrayList<Integer> temp = new ArrayList<>(res.get(0));
                     temp.add(k,nums[i]);
                     res.add(temp);
                 }
                 res.remove(0);
             }
         }
         return res;
     }
 }
LintCode——全排列的更多相关文章
- [LintCode] 全排列
		
递归实现: class Solution { public: /** * @param nums: A list of integers. * @return: A list of permutati ...
 - lintcode 中等题:permutations 全排列
		
题目 全排列 给定一个数字列表,返回其所有可能的排列. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一个列表[1,2,3],其全排列为: [ [1,2,3], [1,3,2], [2,1,3 ...
 - lintcode 中等题:permutations II 重复数据的全排列
		
题目 带重复元素的排列 给出一个具有重复数字的列表,找出列表所有不同的排列. 样例 给出列表 [1,2,2],不同的排列有: [ [1,2,2], [2,1,2], [2,2,1] ] 挑战 使用递归 ...
 - (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)
		
--------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...
 - lintcode Permutation Index
		
题目:http://www.lintcode.com/zh-cn/problem/permutation-index/ 排列序号 给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的 ...
 - leetcode & lintcode for bug-free
		
刷题备忘录,for bug-free leetcode 396. Rotate Function 题意: Given an array of integers A and let n to be it ...
 - leetcode & lintcode 题解
		
刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度 ...
 - LintCode 190: Next Permutation
		
LintCode 190: Next Permutation 题目描述 给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列. 如果没有下一个排列,则输出字典序最小的序列. 样例 ...
 - [LintCode]——目录
		
Yet Another Source Code for LintCode Current Status : 232AC / 289ALL in Language C++, Up to date (20 ...
 
随机推荐
- String真的是不可变的吗?
			
你可能问一个人String是可变的吗?想必他们都会一口同生的说String是不可变的,因为String是final修饰的,而且它底层的是final修饰的char[]数组. 可以看到String源码: ...
 - 没有插件的sublime编辑器是没有灵魂的
			
这阵子各种捣鼓,现在趁有空记录一下sublime编辑器的一些实用的插件和安装方法,下午又该继续学习了. 接下来安装的是htmlHint.jsHint.cssLint以及汉化这几种插件,其实插件会使我们 ...
 - 前端工程构建工具之Yeoman
			
一.Yeoman 简介 通常在开发新项目时我们都需要配置工程环境,开发目录,需要下载一些库.框架文件(如 jQuery.Backbone 等),配置编译环境(Less.Sass.Coffeescrip ...
 - MySql详解(四)
			
MySql详解(四) MySql的DML操作 插入: 一.方式一 语法: insert into 表名(字段名,...) values(值,...); 特点: 1.要求值的类型和字段的类型要一致或兼容 ...
 - VS2013自带报表+打印功能
			
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010773667/article/details/27540389 经过了VB版机房收费系统的学习 ...
 - 【洛谷】【单调栈】P1823 音乐会的等待
			
[题目描述:] N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见 ...
 - 3532: [Sdoi2014]Lis
			
Description 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若干项,使得4的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案. 如果有多种方案,请输出将删去 ...
 - Oracle rdbms  Brush password
			
Restore database user history account password 1. 用户状态 select * from user_astatus_map; select * from ...
 - Spark项目之电商用户行为分析大数据平台之(三)大数据集群的搭建
			
Zookeeper集群搭建 http://www.cnblogs.com/qingyunzong/p/8619184.html Hadoop集群搭建 http://www.cnblogs.com/qi ...
 - -bash: fork: retry: Resource temporarily unavailable;centos6.5
			
Last login: Wed Jun 18 14:04:11 2014 from 1.1.1.135 -bash: fork: retry: Resource temporarily unavail ...