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