1 回答

TA貢獻(xiàn)6條經(jīng)驗(yàn) 獲得超3個贊
????首先說一下,?static?ArrayList<String>?list?=?new?ArrayList<>();泛型掉了類型,應(yīng)該是?new?ArrayList<String>();
????再說遞歸,
????for(int?i=start;i<end;i++){
????String?str?=?strs[start];
????strs[start]?=?strs[i];
????strs[i]?=?str;
????perm(strs,start+1,end);
????strs[i]?=?strs[start];
????strs[start]?=?str;
????先說下遞歸算法的特點(diǎn):代碼簡潔,但邏輯性比較強(qiáng),理解起來要難一些。再說一下這段程序,關(guān)鍵是上面這段代碼的理解,相信你其他的應(yīng)該都可以看懂。這段代碼是指先交換數(shù)組strs[i]和strs[start]的值(注意:這個時候數(shù)組strs[i]和strs[start]的值已經(jīng)互換了,已經(jīng)改變了),再對satrt加一,進(jìn)行函數(shù)遞歸,最后又把strs[i]和strs[start]的值還原回來(這個時候恢復(fù)成為原來的數(shù)組)。當(dāng)start==end的時候,list列表添加入此時數(shù)組strs的所有字符串。說的可能比較抽象,你不妨試試幾組數(shù)據(jù),分別把start,end 設(shè)為0,2;0,3;1,3;1;4自己試著寫一下,找到思路。這個程序主要是對數(shù)組內(nèi)元素,第start到end元素進(jìn)行排列組合。并列出所有可能的排列值
添加回答
舉報(bào)