Cần viết hàm JavaScript nhận mảng số làm đối số đầu tiên và số đơn làm đối số thứ hai. Hàm chọn các phần tử từ mảng sao cho tổng bằng số đối số thứ hai. Hàm trả về mảng tất cả các mảng con số mà tổng cho tổng yêu cầu.
Lưu ý: thứ tự không quan trọng và có thể dùng một số nhiều hơn một lần để tạo tổng.
Ví dụ - Nếu mảng và tổng:
const arr = [14, 6, 10]; const sum = 40;
Đầu ra:
const output = [
[ 14, 14, 6, 6 ],
[ 14, 6, 10, 10 ],
[ 6, 6, 6, 6, 6, 10 ],
[ 10, 10, 10, 10 ]
];
Ví dụ
const arr = [14, 6, 10];
const sum = 40;
const findSum = (arr, sum) => {
const res = [];
const search = (index, part = []) => {
const s = part.reduce((a, b) => a + b, 0);
if (s === sum){
res.push(part)
};
if (s >= sum || index >= arr.length){ return; };
search(index, part.concat(arr[index]));
search(index + 1, part);
};
search(0);
return res;
}
console.log(findSum(arr, sum));
Kết quả
Điều này sẽ tạo ra đầu ra sau:
[
[ 14, 14, 6, 6 ],
[ 14, 6, 10, 10 ],
[ 6, 6, 6, 6, 6, 10 ],
[ 10, 10, 10, 10 ]
]