我有一个数组[1,2,4,5,1,7,8,9,2,3]
我希望它生成值之和小于 10 的所有子集
当前结果[[1,2,4],[5,1],[7],[8],[9],[2,3]]
预期结果[[4,5,1],[9,1],[8,2],[3,7],[1,2]]
这就是我所做的
var a = [1,2,4,5,1,7,8,9,2,3], tempArr = []; tempSum = 0, result = [];
for (var i = 0;i< a.length; i += 1 ) {
tempSum+=a[i];
tempArr.push(a[i]);
if((tempSum+a[i+1])>10) {
result.push(tempArr);
tempSum = 0;
tempArr = [];
} else if (i == a.length-1 && tempArr.length > 0) { // if array is [1,2,3]
result.push(tempArr);
}
}
但它给了我[[1,2,4],[5,1],[7],[8],[9],[2,3]]
并且它有6 个子集,但我希望得到 [[4,5,1],[9,1],[8,2],[3,7],[1,2]]
其中有5 个子集。
最佳答案
以下逻辑是 JavaScript 中的:-
var limit = 10;
var arr = [1,2,4,5,1,7,8,9,2,3];
arr.sort();
var ans = new Array ( );
while(arr.length >0){
var ts = arr[arr.length-1];
arr.splice(arr.length-1 , 1);
var ta= new Array ( );
ta.push(ts);
var x = arr.length-1;
while(x>=0){
if(ts + arr[x] <= limit){
ts = ts + arr[x];
ta.push(arr[x]);
arr.splice(x , 1);
}
x= x-1;
}
ans.push(JSON.stringify(ta));
}
alert(ans);
它正在根据需要提供输出。
[9,1],[8,2],[7,3],[5,4,1],[2]
关于javascript - 阵列处理逻辑校正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43536944/