357. 统计各位数字都不同的数字个数

166 阅读1分钟

357. 统计各位数字都不同的数字个数

题目要求 0 <= n <= 8

边界情况:

  1. n = 0时,0<= x < 1x = 0
  2. n = 1时,0<= x < 10x = 0 ~ 9
  3. n = 2时,0<= x < 100x的范围由两部分组成如下:
  • 一位数的x,可以按照情况1和情况2计算
  • 两位数的x,可以由组合数学计算:第一位的选择有9种(1 ~ 9),第二位的选择有9种(0 ~ 9,要保证和第一位值不一样)

一般化推导出,当2<= n <= 10时,x = 9 * A (n19){n-1 \choose 9},再加上含有小于n位数的x的个数,就是答案了

var countNumbersWithUniqueDigits = function (n) {
    if (n === 0) return 1;
    if (n === 1) return 10;
    var res = 10, cur = 9;
    for (var i = 0; i < n - 1; i++) {
        cur = cur * (9 - i);
        res = res + cur;
    }
    return res;
};