两种递归解决思路
字符串的排列
http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7
本题采用两种递归方法,大家有何理解???
import java.util.ArrayList;
import java.util.Collections;
/**
- 题目:字符串的排列
- 描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。
- 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba
- 思路:参考别的思路 ,递归
- /
public class array27 {
public static void main(String[] args) {String string="a"; ArrayList<String> arrayList=Permutation( string); for(int i=0;i<arrayList.size();i++) { System.out.println(arrayList.get(i)); }
}
public static ArrayList<String> Permutation(String str) { ArrayList<String> arrayList=new ArrayList<String>(); if(str==null || str.length()==0) return arrayList; char[] c=str.toCharArray(); perm(c,arrayList,0); Collections.sort(arrayList); return arrayList; } // 递归方法一:运行时间:138ms 占用内存:12244k public static void perm(char[] c,ArrayList<String> arrayList,int start){ if(c==null || start==c.length-1) if(!arrayList.contains(String.valueOf(c))) arrayList.add(String.valueOf(c)); for(int i=start;i<c.length;i++) { char temp=c[i]; c[i]=c[start]; c[start]=temp; perm(c,arrayList,start+1); temp=c[i]; c[i]=c[start]; c[start]=temp; } } //递归方法二: 运行时间:130ms 占用内存:12332k public static void perm1(char[] c,ArrayList<String> arrayList,int start){ if(c==null || start>c.length-1) return; for(int i=start;i<c.length;i++) { char temp=c[i]; c[i]=c[start]; c[start]=temp; if(!arrayList.contains(String.valueOf(c))) arrayList.add(String.valueOf(c)); perm(c,arrayList,start+1); temp=c[i]; c[i]=c[start]; c[start]=temp; } }
}