Leetcode Java Count Numbers with Unique Digits

업데이트:

문제

Link

코드

class Solution {

  public int countNumbersWithUniqueDigits(int n) {
    if (n == 0) {
      return 1;
    } else {
      int count = 10;
      int unit = 9;
      for (int idx = 2; idx <= n && idx <= 10; idx++) {
        unit *= 9 - idx + 2;
        count += unit;
      }
      return count;
    }
  }

}

결과

Link

설명

  1. 주어진 정수 n을 이용하여 0 이상 $10^{n}$미만의 고유한 숫자로 이루어진 숫자열의 개수를 찾는 문제이다.

  2. n이 0인 경우 0밖에 없으므로, 1을 주어진 문제의 결과로 반환한다.

  3. 문제 풀이에 필요한 변수를 정의한다.
    • count는 n이 1인 경우 0 ~ 9 까지 10개의 고유 숫자가 존재하므로, 10으로 초기화 한다.
    • unit은 유일한 숫자의 개수를 산정하기 위한 초기 단위이다.
  4. 2부터 idx가 n과 10 이하일 때까지 증가시키며 숫자를 센다.
    • unit에 $9 - idx + 2$와 자기 자신을 곱한 후, count에 더하여 반복을 계속 수행한다.
      • n이 2인 경우, $10 + (9 \times 9) = 10 + 81 = 91$이 고유한 숫자들로 이루어진 숫자열의 개수이다.
      • n이 3인 경우, $10 + (9 \times 9) + (9 \times 9 \times 8) = 10 + 81 + 648 = 739$이 고유한 숫자들로 이루어진 숫자열의 개수이다.
      • 이런 식으로 0이상 $10^{n}$ 미만의 고유한 숫자들로 이루어진 숫자열의 개수를 구할 수 있다.
  5. 총 개수를 계산한 count를 주어진 문제의 결과로 반환한다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기