μ½”λ”©ν…ŒμŠ€νŠΈ/LeetCode

[LeetCode] Numbers With Same Consecutive Differences

μœ€μ½”λ”© 2022. 9. 3. 17:20

문제링크

 

Numbers With Same Consecutive Differences - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

ν˜„μž¬ μžλ¦¬μˆ˜μ™€ 이전 자리수, 이후 자리수λ₯Ό λΊ€ μ ˆλŒ€κ°’μ΄ kλ₯Ό  λ§Œμ‘±ν•˜λŠ” λͺ¨λ“  수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€.
n은 λ°˜ν™˜ 숫자의 자리수, kλŠ” λ°˜ν™˜ 숫자의 μΈμ ‘ν•œ 자리수끼리의 차의 μ ˆλŒ€κ°’μ„ μ˜λ―Έν•œλ‹€.
쑰건 : 0으둜 μ‹œμž‘ν•˜λŠ” μˆ˜λŠ” 올 수 μ—†λ‹€.
2 <= n <= 9, 0 <= k <= 9

μ ‘κ·Ό 방법

n = 3, k = 4μΌλ•Œ ν•˜λ‚˜μ˜ 예λ₯Ό 듀어보면

  1  
  5  
1   9

이처럼 1 => 15 => 151 or 159 λΌλŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰ν•  수 μžˆλ‹€. (DFS 문제)

즉, ν˜„μž¬μ˜ 값에 kλ₯Ό λ”ν•˜κ±°λ‚˜ λΊ€ 값이 0 ~ 9 사이면 μΆ”κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰ν•  수 μžˆλ‹€.

 

/**
 * @param {number} n
 * @param {number} k
 * @return {number[]}
 */
var numsSameConsecDiff = function (n, k) {
  const output = [];

  const DFS = (n, num) => {
    if (n === 0) return output.push(num);

    const lastDigit = num % 10;

    const nextDigits = new Set([lastDigit - k, lastDigit + k]);

    for (const nextDigit of nextDigits) {
      if (0 <= nextDigit && nextDigit < 10) {
        const newNum = num * 10 + nextDigit;
        DFS(n - 1, newNum);
      }
    }
  };

  for (let num = 1; num < 10; num++) {
    DFS(n - 1, num);
  }

  return output;
};