虽然执行递归计算字符串排列或组合需要在每个递归级别创建新对象,但更快会导致堆栈溢出,以防止我尝试模拟字符数组或字符串生成器上的方案但问题出现时因此,在递归复杂度的每个级别上,管理字符数组或字符串构建器也变得过于复杂。
如何在这里解决这种情况是我写的代码: -
private static int solve(int num) {
if (num == 1) {
return 6;
}
combination("", "");
return list.size();
}
private static int combination(String ch, String prev) {
if (!ch.isEmpty() && ch.split(" ").length == arrInput.length)
list.add(performSum(ch));
else {
for (int i = 0; i < creditScore.length; i++) {
prev = ch;
if (ch.isEmpty())
ch = "" + creditScore[i];
else
ch = ch + " " + creditScore[i];
combination(ch, prev);
ch = prev;
}
}
return list.size();
}
这种情况可能就像假设有学生总分的组合,其中: -
credits allocated ranges from 1<= N <=5
Number of subjects from 1<= N <=100
Grade points from 5<=N<=10
Therefore as an example, a combination of score could be (1*6)+(2*10)+(4*7)....N subjects
找到完全不同的分数组合。
f(x)= f(x-1)将是无限的
deeper
起点。
对于f(x)= f(x-1),您可以存储r [i],其中i = f(i * k),换句话说,您每k步存储一次结果。如果x很大,你可能想要几何存储:k ^ i。
检查树上最低的共同祖先问题,以获取存储每个k ^ i步的示例。combinatorics
和数学交换。