Count Numbers with Unique Digits

来源:互联网 发布:公安部防网络诈骗中心 编辑:程序博客网 时间:2024/05/22 06:24

题目地址:https://leetcode.com/problems/count-numbers-with-unique-digits/description/

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

Example:
Given n = 2, return 91. (The answer should be the total numbers in the range of 0 ≤ x < 100, excluding [11,22,33,44,55,66,77,88,99])

这种题目可以用组合的思想:

可以这么想,假如f(n)表示各位数字不同的数字的个数,那么当一个数字有n位的时候,有以下两种情况:

  1. 如果最高位是0,那么低n1位各位数字不同的数字的个数正好是f(n1)
  2. 如果最高位不为0,那么最高位有C19种可能性,因为只能从1到9中选择,第二位有C19种可能性,这是因为第二位在选完第一位剩下的数字的基础上又添加了0,很显然第三位有C18种可能性,那么当n2第n位有C111n种可能性。

所以:

f(n)=f(n1)+C19C19C18C111n

编码如下:

public class CountNumbersWithUniqueDigits {    public static int countNumbersWithUniqueDigits(int n) {        if (n == 0)            return 1;        if (n == 1)            return 10;        return countNumbersWithUniqueDigits(n - 1) + CNT(n);    }    public static int CNT(int n) {        int res = 9;        for (int i = 1; i < n ; i++) {            res *= (10 - i);        }        return res;    }    public static void main(String[] args) {        for (int i = 1; i <= 15; i++) {            System.out.println(i + "*********" + countNumbersWithUniqueDigits(i));        }    }}
原创粉丝点击