Leetcode 357 Count Numbers with Unique Digits

来源:互联网 发布:二代身份证识别器java 编辑:程序博客网 时间:2024/05/19 10:37

Leetcode 357 Count Numbers with Unique Digits


解题思路:


(1) 当n=0时,0<=x<10^0 ==> 有且仅有1个数; f(0) = 1;

(2)当n=1时,0<=x<10^1 ==> 总有9个数(不考虑的0的话),(0--9),共10个数不同; f(1) = 9 + f(0) = 10;

(3)当n=2时,0<=x<10^2 ==> 其中,两位数是这样构成的, 十位:从 1--9 中选择1个,假设为 选择的是1,那么个位只能从 0,2,3,4,5,6,7,8,9中选,计 9*9 = 81 个数;再加上 0 -- 9的10个数,共计 81 + 10 = 91个数不同;f(2) = 9*9 + f(1) = 91;

(4) 当n=3时,0<=x<10^3 ==> 其中,三位数是这样构成的, 百位:从 1--9 中选择1个,假设为 选择的是1,那么十位只能从 0,2,3,4,5,6,7,8,9中选,假设选择的是2,那么个位只能从 0,3,4,5,6,7,8,9中选,计 9*9*8 = 648 个数;再加上0--99的91个数,共计 648 + 91= 739个数不同;f(3) = 9*9*8 + f(2) = 739;

....


当n<=10时,设n = k , f(n) = 9*9*8*...*(9-k+1) + f(n-1);

当n>10时,有超过了10位,那么至少必有1位重复,所以 f(n) = f(10);


AC代码如下,仅供参考。

(在这里,用到了打表)。

class Solution {public:    int countNumbersWithUniqueDigits(int n) {int array[11] = { 1,10,91,739,5275,32491,168571,712891,2345851,5611771,8877691 };if (n <= 10)return array[n];else return array[10];            }};



0 0
原创粉丝点击