1. 程式人生 > >字串全排列(效能分析Java版)

字串全排列(效能分析Java版)

具體的思路我就不寫了,借用網上的一張圖來表示:

我的程式碼如下:

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()函式呼叫。

目前想到的原因就這兩點,具體集合的原始碼實現還要去找一下官方文件才好分析。