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

JavaScript에서 숫자를 1로 낮추기

<시간/>

문제

number, num을 유일한 인수로 취하는 JavaScript 함수를 작성해야 합니다.

  • 우리 함수는 num에 대해 다음 두 가지 작업만 수행할 수 있습니다. num이 짝수이면 num을 num/2로 바꿀 수 있습니다.

  • num이 홀수이면 num을 num + 1 또는 num - 1로 바꿀 수 있습니다.

이 두 연산의 조합만 사용하여 함수는 num을 1로 낮추는 데 필요한 최소 연산 수를 계산하는 데 필요합니다. 함수는 최소 연산 수를 반환해야 합니다.

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

인 경우
const num = 7;

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

const output = 4;

출력 설명:

가능한 가장 작은 연산은 -

이기 때문에
7 -> 8 -> 4 -> 2 -> 1
or
7 -> 6 -> 3 -> 2 -> 1

예시

이에 대한 코드는 -

const num = 7;
const downToOne = (num = 1) => {
   let min = Number.POSITIVE_INFINITY;
   let stack = [{ num: num, step: 0 }];
   let set = new Set();
   let next;
   let item;
   while (stack.length) {
      item = stack.shift();
      if (item.num === 1) {
         if (min > item.step) {
            min = item.step;
         }
         continue;
      }
      if (set.has(item.num) || item.step >= min) {
         continue;
      }
      set.add(item.num);
      next = item.step + 1;
      if (item.num % 2 === 0) {
         item.num /= 2;
         stack.push({ num: item.num, step: next });
      } else {
         stack.push({ num: item.num - 1, step: next });
         stack.push({ num: item.num + 1, step: next });
      }
   }
   return min;
};
console.log(downToOne(num));

출력

콘솔의 출력은 -

4