모든 주제에 대한 소스 코드 : 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)