题目
Given a non-negative integer n, count all numbers with unique digits, x, where 0≤x<10n .
Example:
Given n = 2, return 91. (The answer should be the total numbers in the range of 0 ≤ x < 100, excluding [11,22,33,44,55,66,77,88,99])
Credits:
Special thanks to @memoryless for adding this problem and creating all test cases.
分析
给定n, 给出 0≤x<10n 之间没有重复位数的数字的个数.
用排列组合的规律可以求出来:
10 + 9 * 9 + 9 * 9 * 8 + 9 * 9 * 8 * 7 + … (加到第10项之后就不必再加了.)
实现
0ms
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if (n == 0) return 1;
int result = 10, pdt = 9;
for (int i = 1; i < n; i++) {
pdt *= (10 - i);
result += pdt;
if (i > 10) break; // 位数大于10必定有重复.不存在满足条件的数
}
return result;
}
};