Chúng tôi được yêu cầu viết một hàm JavaScript nhận một số n. Hàm của chúng ta sẽ trả về một mảng các số nguyên 1..n được sắp xếp theo cách sao cho tổng của mỗi 2 số liên tiếp là một hình vuông.
Ví dụ
Mã cho điều này sẽ là -
const n = 15; const buildSquaresArray = (n = 1, res = []) => { const helper = (res, set, n) => { if(set.size === n){ return true; }; for(let i = 1; i <= n; i++){ if (set.has(i)){ continue; }; if(res.length && Math.sqrt(res[0] + i) % 1 !== 0){ continue; }; set.add(i); res.unshift(i); if(helper(res,set,n)){ return true; } res.shift(); set.delete(i); }; return false; }; return helper(res,new Set(),n) ? res : false; }; console.log(buildSquaresArray(n));
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
[ 9, 7, 2, 14, 11, 5, 4, 12, 13, 3, 6, 10, 15, 1, 8 ]