用JAVA的函数递归写出一个程序实现对任意字符串的所有排列的形式.类如: 输入 "abc" 10
1个回答
展开全部
此题有点挑战性,欢迎各位优化或改进这个算法:
/*
* StringArrange.java
*
* Created on 2006年9月8日, 下午6:44
*
*/
package javaapplication1;
/**
*
* @author lanxiazhi
*/
public class StringArrange {
/** Creates a new instance of StringArrange */
public StringArrange() {
}
private StringBuffer[] arrange(StringBuffer[]sbs,char addChar){
int m=sbs.length;
int n=sbs[0].length();
StringBuffer[] result=new StringBuffer[m*(n+1)];
for(int i=0;i<m;i++)
for(int j=0;j<n+1;j++){
result[i*(n+1)+j]=new StringBuffer(sbs[i].toString()).insert(j,addChar);
}
return result;
}
public StringBuffer[] form(String s){
if(s.length()==1)return new StringBuffer[]{new StringBuffer(s)};
else
return arrange(form(s.substring(0,s.length()-1)),s.charAt(s.length()-1));
}
public static void main(String[] args) {
String s="abcd";
StringBuffer[] result=new StringArrange().form(s);
System.out.println("total: "+result.length);
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
}
/*
* StringArrange.java
*
* Created on 2006年9月8日, 下午6:44
*
*/
package javaapplication1;
/**
*
* @author lanxiazhi
*/
public class StringArrange {
/** Creates a new instance of StringArrange */
public StringArrange() {
}
private StringBuffer[] arrange(StringBuffer[]sbs,char addChar){
int m=sbs.length;
int n=sbs[0].length();
StringBuffer[] result=new StringBuffer[m*(n+1)];
for(int i=0;i<m;i++)
for(int j=0;j<n+1;j++){
result[i*(n+1)+j]=new StringBuffer(sbs[i].toString()).insert(j,addChar);
}
return result;
}
public StringBuffer[] form(String s){
if(s.length()==1)return new StringBuffer[]{new StringBuffer(s)};
else
return arrange(form(s.substring(0,s.length()-1)),s.charAt(s.length()-1));
}
public static void main(String[] args) {
String s="abcd";
StringBuffer[] result=new StringArrange().form(s);
System.out.println("total: "+result.length);
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询