Reconstrucción del lenguaje C [357] Calcular el número de dígitos con diferentes dígitos

Código fuente para todos los temas: dirección de Git

tema

给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。

示例:

输入: 2
输出: 91 
解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。

Programa:

  • Este problema puede verse como dp + matemáticas, que es la idea de permutación y combinación. Para n dígitos, el comienzo de 0 se pasa al siguiente nivel (n-1 dígitos), y la permutación y combinación directas restantes son suficientes, y n no puede ser mayor que 10.
class Solution
{
    
    
public:
    int countNumbersWithUniqueDigits(int n)
    {
    
    
        if (n == 0)
            return 1;
        else if (n == 1)
            return 10;
        else if (n == 2)
            return 91;
        else if (n > 10)
            return countNumbersWithUniqueDigits(10);
        else
        {
    
    
            return countNumbersWithUniqueDigits(n - 1) + 9 * A(9, n - 1);
        }
    }
    int A(int m, int n)
    {
    
    
        //排列组合计算
        if (n == 1)
            return m;
        else
            return m * A(m - 1, n - 1);
    }
};
Cálculo de complejidad
  • Complejidad del tiempo: O (n)
  • Complejidad espacial: O (1)

Supongo que te gusta

Origin blog.csdn.net/symuamua/article/details/114526513
Recomendado
Clasificación