Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript의 아름다운 숫자 배열

<시간/>

아름다운 배치:

1에서 num까지 num의 정수가 있다고 가정합니다. 아름다운 배치를 정의합니다. 이 배열의 i번째 위치(1 ≤ i ≤ N)에 대해 다음 중 하나가 참인 경우 이 숫자로 성공적으로 구성된 배열로 -

  • i번째 위치의 숫자는 i로 나눌 수 있습니다.

  • i는 i번째 위치의 숫자로 나눌 수 있습니다.

문제

우리는 숫자 num을 받아서 num에 대해 구성할 수 있는 아름다운 배열의 개수를 반환하는 JavaScript 함수를 작성해야 합니다.

예를 들어, 함수에 대한 입력이 -

인 경우
const input = 2

그러면 출력은 다음과 같아야 합니다. -

const output = 2

출력 설명

첫 번째 아름다운 배열은 [1,2]:

두 번째로 아름다운 배열은 [2,1]:

예시

이에 대한 코드는 -

const num = 4;
const countArrangements = (num = 1) => {
   let ans = 0
   const recur = (curr, vis) => {
      if (curr === 1){
         ans++;
      }else{
         for (let i = num; i; i--) {
            let possible = (i % curr === 0 || curr % i === 0);
            let visited = vis & 1 << i;
            if (possible && !visited){
               recur(curr-1, vis | 1 << i);
            }
         }
      }
   };
   recur(num, 0);
   return ans;
};
console.log(countArrangements(num));

코드 설명:

결과 변수(ans ) 그런 다음 재귀 함수를 만듭니다. 여러 분기 가능성을 탐색합니다. 이 재귀 함수에는 두 개의 인수만 필요합니다. 현재 배치하려는 숫자(curr)와 이미 방문한 지점(vis)입니다.

출력

콘솔의 출력은 -

8