给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x <10n 。
示例:
输入:2
输出:91
解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。
Programa:
Este problema puede verse como dp + matemáticas, que es la idea de permutación y combinación. Para n dígitos, el comienzo de 0 se pasa al siguiente nivel (n-1 dígitos), y la permutación y combinación directas restantes son suficientes, y n no puede ser mayor que 10.
classSolution{
public:intcountNumbersWithUniqueDigits(int n){
if(n ==0)return1;elseif(n ==1)return10;elseif(n ==2)return91;elseif(n >10)returncountNumbersWithUniqueDigits(10);else{
returncountNumbersWithUniqueDigits(n -1)+9*A(9, n -1);}}intA(int m,int n){
//排列组合计算if(n ==1)return m;elsereturn m *A(m -1, n -1);}};