所以我有一個遞回程式,我試圖生成一個字串的所有排列。我打算將排列存盤在一個名為 ans 的串列中。
每個當前排列都存盤在用于填充 ans 串列的容器串列中。我懷疑,因為 list 是一個參考型別,所以我可能因為容器串列被操縱而丟失了 ans list 中的值?我是白癡嗎
import java.util.*;
public class practice_3 {
static String str="abc";
static List<List<Character>> ans=new ArrayList<List<Character>>();
public static void permString(ArrayList container )
{
if(container.size()==str.length())
{System.out.println(container);
ans.add(container);
return;
}
for(int i=0;i<str.length();i )
{
if(!container.contains(str.charAt(i)))
{
container.add(str.charAt(i));
permString(container);
container.remove(container.size()-1);
}
}
}
public static void main(String[] args) {
ArrayList<Character> container=new ArrayList<>();
permString(container);
System.out.println(ans);
System.out.println("container end=" container);
}
}
uj5u.com熱心網友回復:
你是對的,因為容器是通過參考傳遞的,container點對點所做的更改也反映在ans(集合的集合)中。
為避免這種情況,您需要在存盤到ans集合時克隆/創建容器的新副本。這可以通過以下方式輕松實作。
ans.add(new ArrayList<Character>(container));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/425226.html
下一篇:遞回函式的惰性模式
