Leetcode 357. Count Numbers with Unique Digits

来源:互联网 发布:南京行知基地 编辑:程序博客网 时间:2024/06/07 22:36

问题描述

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

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])

Credits:
Special thanks to @memoryless for adding this problem and creating all test cases.

可以利用排列组合的知识进行计算。动态规划的思想体现在若求n,Sp[n]=dp[1]+dp[2]+….dp[n]其中dp[n]表示n位数中各不相同的数的个数,Sp[n]表示从0到10^n中各不相同位数的数的个数。而可以用排列组合的知识求dp[n],dp[n]=9*9*8*….(10-k+1)。代码如下:

    public int countNumbersWithUniqueDigits(int n) {        if(n==0)            return 1;        if(n==1)            return 10;        int sum=10;        int val=10;        int num=9;        for(int i=2;i<=n;i++){            num=num*(val-i+1);            sum+=num;        }        return sum;    }