357. Count Numbers with Unique Digits
Description
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])
Solution
在动态规划tag里找的题,但是写完感觉和动态规划好像没什么很大的关系。
感觉就是数学题,找规定范围内的数,每一位(个位、十位、百位….)上的数字都要各不相同,假设n位数,第n位有9种选择(除了0),第(n-1)位有9种选择(0~10共十种,减掉第n位已经选了的那种情况),第(n-2)位有8种…..以此类推。
题目要求是在范围内找,所以n-1位数也符合要求….不停累加情况,直到为1位数(0~9)共十种情况。
Complexity analysis
O(n)
Code
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if (n == 0)
return 1;
int ans = 10;
int k = 9;
for (int i = 2; i <= n; ++i) {
k *= (11 - i);
ans += k;
}
return ans;
}
};