1 回答

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