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元素进行排列组合。并列出所有可能的排列值
添加回答
举报