Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10^n.
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])
分析
这道题求在 0 ≤ x < 10^n 范围内各位数不相同的数有多少个,可以分为一位数不同的有多少个,两位数不同的有多少个,三位数不同的有多少个等等,根据提示中所给的公式,1位数字有10个,第k位有f(k) = 9 * 9 * 8 * … (9 – k + 2)个,累加从2位到n位的f(k)的总和,再加上1位的10个数字,即为所求~
class Solution {public: int countNumbersWithUniqueDigits(int n) { int t=9,cnt=10; if(n==0) return 1; else if(n==1) return 10; else if(n>10) return 0; else for(int i=2;i<=n;i++){ t*=(9-i+2); cnt+=t; } return cnt; }};