我们先来看题目描述给你一个整数 n 统计并返回各位数字都不同的数字 x 的个数其中 0 x 10n 。示例 1输入n 2 输出91 解释答案应为除去 11、22、33、44、55、66、77、88、99 外在 0 ≤ x 100 范围内的所有数字。示例 2输入n 0 输出1提示0 n 8解决方案方法排列组合思路首先考虑两种边界情况当 n 0 时0 ≤ x 1 x 只有 1 种选择即 0 。当 n 1 时0 ≤ x 10 x 有 10 种选择即 0∼9 。当 n 2 时0 ≤ x 100 x 的选择可以由两部分构成只有一位数的 x 和有两位数的 x 。只有一位数的 x 可以由上述的边界情况计算。有两位数的 x 可以由组合数学进行计算第一位的选择有 9 种即 1∼9 第二位的选择也有 9 种即 0∼9 中除去第一位的选择。更一般地含有 d 2 ≤ d ≤ 10位数的各位数字都不同的数字 x 的个数可以由公式 9 × A9 d-1 计算。再加上含有小于 d 位数的各位数字都不同的数字 x 的个数即可得到答案。代码Python3class Solution: def countNumbersWithUniqueDigits(self, n: int) - int: if n 0: return 1 if n 1: return 10 res, cur 10, 9 for i in range(n - 1): cur * 9 - i res cur return resCclass Solution { public: int countNumbersWithUniqueDigits(int n) { if (n 0) { return 1; } if (n 1) { return 10; } int ans 10, cur 9; for (int i 0; i n - 1; i) { cur * 9 - i; ans cur; } return ans; } };Javaclass Solution { public int countNumbersWithUniqueDigits(int n) { if (n 0) { return 1; } if (n 1) { return 10; } int res 10, cur 9; for (int i 0; i n - 1; i) { cur * 9 - i; res cur; } return res; } }