Computer >> Máy Tính >  >> Lập trình >> Javascript

Xây dựng một mảng có kích thước cụ thể với tổng phần tử liên tiếp là hình vuông hoàn hảo trong JavaScript

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
]