我有这样一段代码递归得到字符串的所有排列在一组:转化这个递归进行迭代
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中拥有太多的价值,它溢出堆栈。我从那以后就知道将算法从递归转换为迭代将帮助我解决这个内存问题,因为我将在堆上自己处理堆栈,而不是使用本地堆栈。我从来没有这样做过,也无法将我的头围绕如何解决这个问题。我的问题并不像看到这种转变的例子那么简单,所以我非常赞赏一些关于如何实现这一点的提示。
我建议你备份并尝试在词语中描述*以迭代算法中的步骤来解决相同的问题。如果您无法立即做到这一点,那么请备份另一个步骤,并通过示例进行操作。 –
我不建议您调用类似于以下方法的变量组合:S很难理解 – nachokk
固定对于您 – sunrize920