![](/img/trans.png)
[英]how to find all permutations in int arrayList that sum to 16 (recursively)
[英]How to return all permutations of an ArrayList of Strings
我正在嘗試編寫一種方法,該方法返回一個大的ArrayList<ArrayList<String>>
,其中包含較小的ArrayList,每個較小的ArrayList都具有與起始ArrayList不同的排列。
這是我的方法:
public static ArrayList<ArrayList<String>> permute(ArrayList<String> x) {
ArrayList<ArrayList<String>> res = new ArrayList<ArrayList<String>>();
while (res.size() < fac(x.size())) { //fac method works fine
Collections.shuffle(x);
if (!res.containsAll(x)) {
res.add(x);
}
}
return res;
}
我的方法是基本上繼續改組原始ArrayList,並檢查它是否已經在結果ArrayList中,如果不是,則添加它。 出於某種原因,當我嘗試使用此方法時,即使我有一個if語句,結果數組列表也包含相同的ArrayList,因此不會發生。
我想念什么?
您的算法存在三個問題:
x = new ArrayList(x)
。 contains
,而不是containsAll
;。 否則,你正在檢查所有新洗牌數組列表中的元素是否包含,這是從來沒有的情況下,所以你再次添加相同的列表。 1/n!
(用於n
元素),因此這將花費非常長的時間。 res.containsAll(x)
如果x中所有String
類型的元素都存在於res
則將為true。 但是res
的元素是ArrayList<String>
。 您可能想要:
res.contains(x)
如果res內存在x(它是ArrayList<String>
,則為true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.