您的位置:首页 > 其它

回溯法——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].
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: