其他分享
首页 > 其他分享> > LeetCode Daily 33

LeetCode Daily 33

作者:互联网

2022-4-11 T.357 统计各位数字都不同的数字

 

题目描述:

给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。

 

示例:

输入:n = 2
输出:91
解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字。 

 

思路:

暴力求解当n >= 7会超时。故递推找规律。

当n=0时,结果为1,当n=1时,结果为1+9=10。

当n=2时,结果为1+9+9*9=91。

每次选择都会少一位,故状态转移方程为:dp[i] = dp[i-1] + (dp[i-1] - dp[i-2]) * (11-i).

 

代码:

class Solution {
public:
    int countNumbersWithUniqueDigits(int n) {
        vector<int> dp(n + 1);
        if(n == 0) return 1;
        dp[0] = 1; dp[1] = 10;
        for(int i = 2; i <= n; i++) {
            dp[i] = dp[i-1] + (dp[i-1] - dp[i-2]) * (11 - i);
        }
        return dp[n];
    }
};

 

标签:11,10,数字,33,Daily,int,91,LeetCode,dp
来源: https://www.cnblogs.com/LWHCoding/p/16128514.html