我可以通过一个例子轻松说明我想要做的事情。假设如下:
public class MyPostAction extends ActionSupport {
private List<MyData> resultsList = new ArrayList<>();
//getter/setter
}
我希望获得加上总和的金额数字的所有排列,并且&gt; = minNum&amp;&amp; &lt; = maxNum。
例如,如果我是手工创建这些排列,我会这样开始:
30,30,12,1,1,1
30,30,11,2,1,1
30,30,11,1,2,1
30,30,11,1,1,2
30,30,10,3,1,1
30,30,10,2,2,1
等
这是数学/编程中的一个已知问题吗?有没有解决它的算法?
提前致谢。
答案 0 :(得分:1)
这是一个JavaScript解决方案(如果您的环境递归深度限制了您想要的结果数量,您可以将递归转换为显式数组堆栈,像函数调用一样推送参数并弹出以处理它们):< / p>
function partition(n, min, max, parts) {
if (n < 0){
return;
} else if (n == 0) {
document.getElementById('output').innerHTML += (JSON.stringify(parts)) + '<br>';
} else {
for (var i=max; i>=min; i--){
var _parts = parts.slice();
_parts.push(i);
partition(n-i,min,max,_parts)
}
}
}
partition(6,2,4,[])
<pre id="output"></pre>