leecode_357 Count Numbers with Unique Digits

来源:互联网 发布:欧姬丝洗发水 知乎 编辑:程序博客网 时间:2024/06/04 20:28

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

用DP解决问题:举个例子,n=3, 首先,肯定小于n=2的10倍;

                                                     再者,只有两位的unique的数,在末尾添上任意其中一个数,就不符合条件,有2*sum[2];

                                                                只有一位的unique的数, 在末尾添上与之一样的数,就不符合条件,有1*sum[3];

                                                                一位都没有的数,就是0,在末尾添上任意数都符合要求,于是就有0*sum[0];

                                       所以,sum[n]=sum[n-1]*10-(n-1)*digi[n-1]-(n-2)*digi[n-2]-............0*digi[0]

c++实现:

class Solution {public:    int countNumbersWithUniqueDigits(int n) {        vector<int> digi;        vector<int> sum;        digi.push_back(1);        digi.push_back(9);        sum.push_back(1);        sum.push_back(10);                int sum_i=10;        int temp=9;                for (int i=2;i<=n;i++){            int a=sum[i-1]*10-temp;            sum.push_back(a);            digi.push_back(a-sum[i-1]);            temp=temp+digi[i]*i;        }                        return sum[n];    }};



0 0
原创粉丝点击