【修正対象】配列の組合せ
8002 ワード
package ;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class {
//
public static void pailie(char a[],int lev)
{
if(lev==a.length)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]);
}
System.out.println();
}
else
{
for(int j=lev;j<a.length;j++)
{
swap(a,lev,j);
pailie(a,lev+1);
swap(a,lev,j);
}
}
}
public static void perm2(char a[],int lev)
{
if(lev==a.length)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]);
}
System.out.println();
}
else
{
boolean tf=true;
for(int j=lev;j<a.length;j++)
{
//
for(int k=lev;k<j;k++)
{
if(a[k]==a[j])
{
tf=false;
break;
}
}
if(tf)
{
swap(a,lev,j);
perm2(a, lev+1);
swap(a,lev,j);
}
}
}
}
public static void pailie2(char a[],int lev)
{
if(lev==a.length)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]);
}
System.out.println();
}
else
{
for(int j=lev;j<=a.length-1;j++)
{
if(hasCommon(a,lev,j))
{
swap(a,lev,j);
pailie(a,lev+1);
swap(a,lev,j);
}
}
}
}
private static boolean hasCommon(char[] a, int lev, int j) {
// TODO Auto-generated method stub
for(int i=lev;i<j;i++)
{
if(a[j]==a[i]) return false; // ,
}
return true; //
}
private static void swap(char[] a, int lev, int j) {
char t=a[lev];
a[lev]=a[j];
a[j]=t;
}
public static void main(String args[]){
char chs[]={'1','2','2'};
System.out.println(" 1");
pailie(chs, 0);
System.out.println(" 2");
perm2(chs,0);
}
}