自己写的用递归实现无重复字符串全排列的方法,希望有用,可以共同讨论下~
- /*
- 思路:基本就是按照数学中排列组合的原理,对多个字符排列时,第一个位置上可以选取全部字符,
- 第二个位置上可取除去第一个位置上字符的剩余所有字符,依次类推。。。
- */
- import java.lang.*;
- import java.util.*;
- class Test8{
- public static void main(String[] args){
- String str="abc";
- System.out.println((all(str)).size());
- System.out.println(all(str));
- }
- public static ArrayList all(String str){
- ArrayList<String> al=new ArrayList<String>();
- if(str.length()==1){
- al.add(str);
- return al;
- }else{
- char[] ch=str.toCharArray();
- for(int i=0;i<ch.length;i++){//对排列第1个位置上的可取字符进行遍历
- String sub=str.replace(ch[i]+"","");
- ArrayList arr=all(sub); //递归对除去第1个位置上字符的剩余子串进行排列
- Iterator<String> it=arr.iterator();
- while(it.hasNext()){
- String s=new String();
- //String ss=it.next();
- String re=it.next()+ch[i];//合起来就是整个字符串了
- al.add(re);
- }
- }
- return al;
- }
- }
- }
复制代码
运行结果是- 6
- [cba, bca, cab, acb, bac, abc]
复制代码
ps: 主函数中是直接打印的返回的ArraryList对象,还可修改下打印的更好看点;这个代码应该是对任意长度的字符串都是适用的。 |