我有这段代码递归地获取一组字符串的所有排列:
public static List<List<String>> combinations(List<String> strings)
{
if (strings.size() > 1)
{
List<List<String>> result = new ArrayList<List<String>>();
for (String str : strings)
{
List<String> subStrings = new ArrayList<String>(strings);
subStrings.remove(str);
result.add(new ArrayList<String>(Arrays.asList(str)));
for (List<String> combos : combinations(subStrings))
{
combos.add(str);
result.add(combos);
}
}
return result;
}
else
{
List<List<String>> result = new ArrayList<List<String>>();
result.add(new ArrayList<String>(strings));
return result;
}
}
如果我的 arraylist 包含太多值,它会溢出堆栈。从那以后,我了解到将算法从递归转换为迭代将帮助我解决这个内存问题,因为我将自己在堆上处理堆栈,而不是使用本机堆栈。我以前从未这样做过,也无法解决如何解决这个问题。我的问题并不像看到的这种转换的例子那么简单,所以我将非常感谢一些关于我如何实现这一点的提示。