具体的思路我就不写了,借用网上的一张图来表示:
我的代码如下:
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> ls=new ArrayList<String>();
if(str==null||str.length()==0){
return ls;
}
Circle(ls,str.toCharArray(),0);
Collections.sort(ls);
return ls;
}
public static void Circle(ArrayList<String> ls,char[] cArray,int location){
if(location==cArray.length){
if(!ls.contains(new String(cArray))){
ls.add(new String(cArray));
}
}
for(int i=location;i<cArray.length;i++){
swap(cArray,i,location);
Circle(ls,cArray,location+1);
swap(cArray,location,i);
}
}
public static void swap(char[] cArray,int i,int location){
if(i!=location){
char temp=cArray[i];
cArray[i]=cArray[location];
cArray[location]=temp;
}
}
}
后来提交后运行通过,但是我发现一个问题,时间为100ms,而其他人的时间一般在1ms以内,对比了一下逻辑,发现我的开销有几点:一个是对ArrayList的contains调用,此时可以拿Set集合进行替换从而减少开销,另一个是Collections.sort()函数调用。
目前想到的原因就这两点,具体集合的源代码实现还要去找一下官方文档才好分析。