给定一个非负整数n,计算所有具有唯一数字x的数字,其中0≤x <10 n。
例:
输入:2
输出:91
说明:答案应该是0≤x <100范围内的总数,
不包括 11,22,33,44,55,66,77,88,99
根据dp来说,n为1:10个,为2 :9*9(因为0~9还有九个数字可以用);为3时,在为2的基础上还可以选择8个数字,往后乘的数依次递减,直到为1,那时候说明n的值已经大于了9,说明数的范围到了10000 0000 00 这个时候已经不可能再有唯一数了,因为总共0~9就十个数。
所以那之后的数结果就是n=9.
code:
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
//根据dp来说,n为1:10个,为2 :9*9(因为0~9还有九个数字可以用);为3时,在为2的基础上还可以选择8个数字
if(n==0) return 1; //仅有结果:0】
int res=10; //f(1)
int uniqueNum=9, avalible=9;
while( n-->1&& avalible>0) //从2开始. 当n>9之后,是没有唯一数的。avalib递减
{
uniqueNum=uniqueNum*avalible;
res+=uniqueNum;
avalible--;
}
return res;
}
};