Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Xây dựng mảng kích thước n với tổng 2 phần tử liên tiếp là số chính phương trong JavaScript

Mô tả vấn đề

Chúng ta cần viết hàm JavaScript nhận vào số n. Hàm trả về mảng các số 1..n sắp xếp sao cho tổng của mỗi 2 số liên tiếp là số chính phương.

Ví dụ minh họa

Mã thực hiện (backtracking):

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

Kết quả trong console:

[ 
  9, 7, 2, 14, 11, 5, 4, 12, 
  13, 3, 6, 10, 15, 1, 8 
]