题目

image.png

思路

  • 可以粗糙地理解成,位数是n的数字中,有多少个符合条件的。n = 0的时候需要特殊处理一下,其他都是一样的。
  • dp[i]表示长度为i的数字,一共有多少个符合条件的。
  • LC357.统计各位数字都不同的数字个数 - 图2,最终结果就是LC357.统计各位数字都不同的数字个数 - 图3

    代码

    1. class Solution {
    2. public:
    3. int countNumbersWithUniqueDigits(int n) {
    4. // dp[i]表示长度为i的数字有多少种可能
    5. if (n == 0) {
    6. return 1;
    7. }
    8. if (n == 1) {
    9. return 10;
    10. }
    11. vector<int> dp(n + 1, 0);
    12. dp[0] = 1, dp[1] = 9; dp[2] = 9 * 9;
    13. for (int i = 2; i <= n; i++) {
    14. dp[i] = dp[i - 1] * (10 - (i - 1));
    15. }
    16. int res = 0;
    17. for (int i = 0; i <= n; i++) {
    18. res += dp[i];
    19. }
    20. return res;
    21. }
    22. };