Leetcode 357.Count Number With Unique Digits

题目描述:

357. Count Numbers with Unique Digits

Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n.

其实这个题目不怎么需要动态规划的知识,感觉有点像找规律填数字。
可以把题目拆开,先思考固定长度为n的所有数中有多少个数字均不相同的数。
另之为f[n],可得:
f[1] = 10; (0, 1,2,3,4,5,6,7,8,9)
f[2] = 9 × 9; (9 ×9,可以在1 - 9 中选出一个数字为长度为2的数字的第一位,在0 以及 1 - 9 除去被先前选中的数字中选出一个数字为长度为2的数字的第二位)
f[3] = 9 × 9 × 8;
f[4] = 9 × 9 × 8 × 7;
f[5] = 9 × 9 × 8 × 7 × 6;
f[6] = 9 × 9 × 8 × 7 × 6 × 5;
......
f[10] = 9 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1;
f[11] = 0;
f[12] = 0;

所以源程序可以这么写 !

 int countNumbersWithUniqueDigits(int n) {
        if(n == 0){
            return 1;
        }else if(n > 10){
            return 0;
        }
        int result = 10;
        int uniqueDigits = 9;
        int availableNumber = 9;
        while(n > 1 && availableNumber > 0){
            uniqueDigits *= availableNumber;
            res += uniqueDigits;
            n -- ;
            availableNumber --;
        }
        return res;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,792评论 0 33
  • 天还是被雾霾笼罩着,灰蒙蒙的,仍然看不见从前的蓝天,但是过的理所当然,毫无愧疚。也许这就是冷血动物吧!还是好面的强...
    麦子上的土地阅读 298评论 0 0
  • 1.冷静下来再教育孩子当孩子犯错时,家长会沉不住气因此而情绪暴躁地打骂孩子。俗话说:“不要在冲动时做出任何决定及举...
    裸奔的石头阅读 171评论 0 0
  • 程序不在大小,下面是自己写的一个模拟红绿灯的程序首先我们先确定功能:1.要有显示灯时间的地方2.灯在剩余时间只有十...
    sunout阅读 253评论 0 2