java - 将具有默认值的小型 JavaScript 函数移植到 Java
问题描述
我正在创建一个有趣的小计算器程序,您可以在其中给出一个总和和一组其他数字,并查看可以将这些数字相加以获得该总和的所有方法。
例如,如果我想看看如何得到12
数字的总和,2,4,6,8,10
我希望输出看起来像这样:
[[2,2,2,2,2,2],[2,2,2,2,4],[2,2,2,4,2],[2,2,2,6],[ 2,2,4,2,2],[2,2,4,4],[2,2,6,2],[2,2,8],[2,4,2,2,2] ,[2,4,2,4],[2,4,4,2],[2,4,6],[2,6,2,2],[2,6,4],[2, 8,2],[2,10],[4,2,2,2,2],[4,2,2,4],[4,2,4,2],[4,2,6] ,[4,4,2,2],[4,4,4],[4,6,2],[4,8],[6,2,2,2],[6,2,4] ,[6,4,2],[6,6],[8,2,2],[8,4],[10,2]]
我过去使用此递归函数使用 javascript 完成了此操作:
function f(A, N, r=[], s=N){
if (s == 0){
return [r];
}
result = [];
for (let a of A){
if (a <= s){
result = result.concat(f(A, N, r.slice().concat(a), s-a));
}
}
return result;
}
您可以使用以下方式调用它:
f([2,4,6,8,10], 12))
这是它的 JsFiddle: https ://jsfiddle.net/6u1v79Lb/1/
我现在正在尝试将此逻辑移植到 java 代码中,但没有成功。我对 Java 的了解并不是最丰富的,但我尝试过使用重载方法使用不同的方法,但未能接近。
这不是工作代码,但我的逻辑是:
public static String f(int[] a, int n, String r, int s) {
if(s == 0) {
return r;
}
ArrayList<String> result = new ArrayList<String>();
for(int a_item : a) {
if(a_item <= s) {
//super confused what to do here
Collections.addAll(result, f(a,n,r, s-a_item));
}
}
return result.toString();
}
解决方案
推荐阅读
- jquery - 使用 jquery 与兄弟姐妹一起显示数据时出现问题
- r - 根据每行的列间隔分配值的有效方法
- python - 尝试将大量数据从 BigQuery 传输到 MongoDB
- eclipse - 我可以更改 Eclipse 进度条的进度条样式(如条纹)吗?
- c# - 如何在c#中减去路径的最后一个元素?[解决了]
- php - 每个钩子有条件地要求 M2O 入口
- html - 样式下拉 a11y 和没有 js?
- javascript - 如何在 Wordpress 插件中组合 2 个 javascript/jquery 函数
- mysql - 如何按日期分组(如果为空则选择 0)MYSQL
- typescript - 泛型数组上的映射推断出错误的类型