一道递归程序的设计题:
编写带有下面声明的例程:
public void permute(String str);
public void permute(char[] str, int low, int high);
第一个例程是个驱动程序,它调用第二个例程并显示String str中字符的所有排序。如果str是"abc",那么输出的串是abc,acb,bca,cab和cba。第二个例程使用递归
编写带有下面声明的例程:
public void permute(String str);
public void permute(char[] str, int low, int high);
第一个例程是个驱动程序,它调用第二个例程并显示String str中字符的所有排序。如果str是"abc",那么输出的串是abc,acb,bca,cab和cba。第二个例程使用递归
System.out.println(new String(str));
for(int i=low; i<=high; ++i){
permute(str, i, high);
str[low] <=> str[i];
permute(str, i, high);
str[low] <=> str[i];
}
}
public void permute(String str){
permute(str.toCharArray(), 0, str.length()-1);
}
public class TestS {
public static void main(String[] args) {
String s="abc";
char[] ch=s.toCharArray();
char[] c=new char[3];
for(int i=0;i<ch.length;i++) {
c[0]=ch[i];
for(int j=0;j<ch.length;j++) {
c[1]=ch[j];
for(int k=0;k<ch.length;k++) {
c[2]=ch[k];
if(i!=j&&i!=k&&j!=k) {
for(int m=0;m<ch.length;m++) {
System.out.print(c[m]);
}
System.out.println();
}
}
}
}
}}
学了JAVA这么久,没见过有这么个符号...
public class OuterA {
static char[] data=null;
static int pos=-1;
public void permute(String str){
data=new char[str.length()+1];
permute(str.toCharArray(),0,str.length()-1);
}
public void permute(char[] str, int low, int high){
if(low>high){//已找到一个结果
System.out.println(new String(data,0,pos+1));
return;
}
pos++;
for(int i=low;i<=high;i++)
{
char t=str[i];
str[i]=str[low];
str[low]=t;
data[pos]=str[low];
permute(str,low+1,high);//递归
t=str[i];
str[i]=str[low];
str[low]=t;
}
pos--;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new OuterA().permute("abcd");
}
}
程序运行结果:
abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
if (low >= high) {
System.out.println(new String(str));
return;
}
for (int i = low; i < high; i++) {
char c = str[low];
str[low] = str[i];
str[i] = c;
permute(str, low + 1, high);
c = str[low];
str[low] = str[i];
str[i] = c;
}
} public void permute(String str) {
permute(str.toCharArray(), 0, str.length());
}