字串全排列(效能分析Java版)
阿新 • • 發佈:2018-12-13
具體的思路我就不寫了,借用網上的一張圖來表示:
我的程式碼如下:
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()函式呼叫。
目前想到的原因就這兩點,具體集合的原始碼實現還要去找一下官方文件才好分析。