亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于Java字符串全排列的問題

關于Java字符串全排列的問題

慕粉3233872 2016-11-23 10:34:10
import?java.util.ArrayList; public?class?test?{ ?static?ArrayList<String>?list?=?new?ArrayList<>(); ?public?static?void?main(String[]?args)?{ ??String[]?strs?=?{"A","B","C","D"}; ??perm(strs,?0,?strs.length); ??for(String?s:list){ ???System.out.println(s); ??} ??list.clear(); ?} ? ?private?static?void?perm(String[]?strs,int?start,int?end){ ??String?s?=?""; ??if(start==end){ ???for(int?i=0;i<strs.length;i++){ ????s+=strs[i]; ???} ???list.add(s); ??}else{ ???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; ???} ??} ?} }這是在網上找的代碼,但是看不太懂,有哪位大神可以詳細講下思路嗎?比如每一步的目的是什么,主要是遞歸那里真的想不通了
查看完整描述

1 回答

已采納
?
Frank_W毅3947945

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元素進行排列組合。并列出所有可能的排列值

查看完整回答
1 反對 回復 2016-11-26
  • TheLast1996
    TheLast1996
    perm(strs, 0, strs.length); for(String s:list){ System.out.println(s); } list.clear(); } 什么意思這段
  • Frank_W毅3947945
    Frank_W毅3947945
    perm(strs, 0, strs.length);是調用下面的perm函數呀,3個參數值分別是strs(創建的數組),0(起始位置),strs.length(終止位置,也就是整個數組了),for(String s:list){ System.out.println(s); },把list里每個元素遍歷一遍并賦值給s,打印輸出s,也就是說依次輸出list里面每一個元素的內容,list.clear();清空list
  • 1 回答
  • 0 關注
  • 1815 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號