Vấn đề
Chúng tôi được yêu cầu viết một hàm JavaScript nhận một mảng chính xác 4 số, arr, làm đối số đầu tiên và đích làm đối số thứ hai.
Hàm của chúng ta cần đánh giá xem các số trong mảng arr có thể hoạt động thông qua *, /, +, -, (,) để nhận giá trị bằng target hay không.
Ví dụ:nếu đầu vào của hàm là
Đầu vào
const arr = [5, 3, 2, 1]; const target = 4;
Đầu ra
const output = true;
Giải thích đầu ra
Vì chúng ta có thể đạt được 4 điều như thế này -
(5 - 1) * (3 - 2) = 4
Ví dụ
Sau đây là mã -
const arr = [5, 3, 2, 1]; const target = 4; const canOperate = (arr = [], target = 1) => { const isValid = x => Math.abs(x - target) < 0.0000001 const helper = (arr = []) => { if (arr.length === 1) { return isValid(arr[0]) } let valid = false for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { const nextArr = arr.filter((x, index) => index !== i && index !== j) valid = valid || helper([...nextArr, arr[i] + arr[j]]) || helper([...nextArr, arr[i] - arr[j]]) || helper([...nextArr, arr[j] - arr[i]]) || helper([...nextArr, arr[i] * arr[j]]) || helper([...nextArr, arr[i] / arr[j]]) || helper([...nextArr, arr[j] / arr[i]]) } } return valid } return helper(arr) } console.log(canOperate(arr, target));
Đầu ra
true