两种递归解决思路
字符串的排列
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;
}
}}

美团公司福利 3017人发布