357. Count Numbers with Unique Digits(唯一数的个数——dp+math)

曾经终败给现在 2023-02-15 12:39 68阅读 0赞

给定一个非负整数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:

  1. class Solution {
  2. public:
  3. int countNumbersWithUniqueDigits(int n) {
  4. //根据dp来说,n为1:10个,为2 :9*9(因为0~9还有九个数字可以用);为3时,在为2的基础上还可以选择8个数字
  5. if(n==0) return 1; //仅有结果:0】
  6. int res=10; //f(1)
  7. int uniqueNum=9, avalible=9;
  8. while( n-->1&& avalible>0) //从2开始. 当n>9之后,是没有唯一数的。avalib递减
  9. {
  10. uniqueNum=uniqueNum*avalible;
  11. res+=uniqueNum;
  12. avalible--;
  13. }
  14. return res;
  15. }
  16. };

发表评论

表情:
评论列表 (有 0 条评论,68人围观)

还没有评论,来说两句吧...

相关阅读