C 언어 재구성 [357] 다른 자릿수를 가진 자릿수 계산

모든 주제에 대한 소스 코드 : Git 주소

이야기

给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。

示例:

输入: 2
输出: 91 
解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。

프로그램:

  • 이 문제는 순열과 조합의 개념 인 dp + mathematics로 볼 수 있습니다. n 자리의 경우 0의 시작은 다음 수준 (n-1 자리)으로 넘겨지고 나머지 직접 순열과 조합으로 충분하며 n은 10보다 클 수 없습니다.
class Solution
{
    
    
public:
    int countNumbersWithUniqueDigits(int n)
    {
    
    
        if (n == 0)
            return 1;
        else if (n == 1)
            return 10;
        else if (n == 2)
            return 91;
        else if (n > 10)
            return countNumbersWithUniqueDigits(10);
        else
        {
    
    
            return countNumbersWithUniqueDigits(n - 1) + 9 * A(9, n - 1);
        }
    }
    int A(int m, int n)
    {
    
    
        //排列组合计算
        if (n == 1)
            return m;
        else
            return m * A(m - 1, n - 1);
    }
};
복잡성 계산
  • 시간 복잡도 : O (n)
  • 공간 복잡성 : O (1)

추천

출처blog.csdn.net/symuamua/article/details/114526513