回溯法——permutation、permutation II数组数字的全排列
2016-05-29 16:25
363 查看
题目描述:permutation
Given a collection of numbers, return all possible permutations.For example,
[1,2,3]have the following permutations:
[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], and[3,2,1].
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> permute(int[] num) {
ArrayList<ArrayList<Integer>> array=new ArrayList();
if(num == null||num.length == 0)
return array;
perm(num,0,array);
return array;
}
public void perm(int[] num,int index,ArrayList<ArrayList<Integer>> array)
{
if(index == num.length-1)
{
ArrayList<Integer> list=new ArrayList();
for(int i=0;i<num.length;i++)
{
list.add(num[i]);
}
array.add(list);
return;
}
for(int i=index;i<num.length;i++)
{
swap(num,index,i);
perm(num,index+1,array);
swap(num,index,i);
}
}
public void swap(int[] num,int i,int j)
{
int temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
题目描述:permutation II
Given a collection of numbers that might contain duplicates, return all possible unique permutations.For example,
[1,1,2]have the following unique permutations:
[1,1,2],[1,2,1], and[2,1,1].
题意:数组有重复数字的情况,集合ArrayList中不允许出现重复排列。
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
ArrayList<ArrayList<Integer>> array=new ArrayList();
if(num == null||num.length == 0)
return array;
perm(num,0,array);
return array;
}
public void perm(int[] num,int index,ArrayList<ArrayList<Integer>> array)
{
if(index == num.length-1)
{
ArrayList<Integer> list=new ArrayList();
for(int i=0;i<num.length;i++)
{
list.add(num[i]);
}
array.add(list);
return;
}
for(int i=index;i<num.length;i++)
{
if(is_swap(num,i,index) == true)//前便没有出现过该数则可以交换
{
swap(num,index,i);
perm(num,index+1,array);
swap(num,index,i);
}
}
}
public boolean is_swap(int[] num,int i,int index)
{
for(int k=index;k<i;k++)
{
if(num[k] == num[i])
return false;
}
return true;
}
public void swap(int[] num,int i,int j)
{
int temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
Given a collection of numbers, return all possible permutations.
For example,
[1,2,3]have the following permutations:
[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], and[3,2,1].
相关文章推荐
- js中数组对象的3个属性
- shutil模块
- async 异步流程控制
- win10不能被远程解决方案(开启远程桌面,防火墙仍不能被远程解决方案)
- Android WebView探索 二、Naive拦截Web请求
- 网页html随机切换背景图片
- 【DAY8】关于多线程的练习
- 牛腩——SQLhelper
- 1314 寻宝
- 使用hibernate annotation 为非空列加上默认值
- 66. Plus One(Java) & 43. Multiply Strings
- Drawable简介之-------shape
- centos7 关闭firewall安装iptables并配置
- 教你安装漂亮的Arc GTK主题
- 【DAY8】关于多线程的学习笔记
- CodeForces 591A
- python学习 数据类型之序列
- Linux(CentOS)中使用Mono+jexus部署Asp.net4.5网站
- ubuntu 安装 openldap 步骤
- use makefile on android-linux