计算各个位数不同的数字个数

此博客链接:

计算各个位数不同的数字个数

题目链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits/

题目

给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。

示例:

输入: 2
输出: 91
解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。

题解

题目是给一个位数,让求位数可以组成多少种不同的数字,示例给的2意思是给一个两位数,可以组成91中不同的数字。

我们可以先举例看,当给一位数时,可以组成10种数,0~9;

当给两位数时,第一位可以选1~9(9种),第二位可以选0~9,但是需要去掉和前面一位相同的数字(共9种),

当给三位数时,第一位可以选1~9(9种),第二位可以选0~9,但是需要去掉前面一位相同的数字(共9种),第三位可以选0~9,但是需要去掉前面两种数字(共8种)

......依次类推,当给n位数时,可以组成()

代码

class Solution {
    public int countNumbersWithUniqueDigits(int n) {
        if(n==0)
        return 1;
       int count=10;
       int temp=9;
       int p=9;
       for(int i=1;i<n;i++)
       {
            temp*=p;
            p--;
            count+=temp; 
       }
       return count;
    }
}

 

结果

 

posted @ 2021-02-02 20:43  萍2樱释  阅读(297)  评论(0编辑  收藏  举报