Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 고유한 숫자로 숫자 세기

<시간/>

음이 아닌 정수 n이 있다고 가정합니다. x는 0에서 10^n 범위에 있는 고유한 숫자 x를 가진 모든 숫자를 계산해야 합니다. 따라서 숫자 n이 2이면 결과는 91이 됩니다. 0에서 100까지 11, 22, 33, 44, 55, 66, 77, 88, 99 없이 숫자를 찾고 싶기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • n이 0이면 1을 반환합니다.

  • n :=10의 최소값 및 n

  • n이 1이면 10을 반환합니다.

  • ans :=9 및 ret :=10

  • 범위 2에서 n까지의 i에 대해

    • ans :=ans * (9 – i + 2)

    • ret :=ret + ans

  • 리턴 렛

예시(C++)

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int countNumbersWithUniqueDigits(int n) {
      if(n == 0)return 1;
      n = min(10, n);
      if(n == 1)return 10;
      int ans = 9;
      int ret = 10;
      for(int i = 2; i<= n; i++){
         ans *= (9 - i + 2);
         ret += ans;
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.countNumbersWithUniqueDigits(3));
}

입력

3

출력

739