Permutation Coefficient

int nPr(int n, int r, vector<vector<int>> &savedResult) {
    if(r == 0)
        return 1;
    
    if(n == 0)
        return 0;
    
    if(savedResult[n][r])
        return savedResult[n][r];
    
    return savedResult[n][r] = 
        nPr(n - 1, r, savedResult) 
        + r * nPr(n - 1, r - 1, savedResult);
}

int P(int n, int r) {
    vector<vector<int>> savedResult(n + 1, vector<int>(r + 1));
    return nPr(n, r, savedResult);
}
int P(int n, int r) {
    long long nPr[n + 1][r + 1];
    
    for(int i = 1; i <= r; i++)
        nPr[0][i] = 0;
    
    for(int i = 0; i <= n; i++)
        nPr[i][0] = 1;
    
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= r; j++)
            nPr[i][j] = (nPr[i - 1][j] + (j * nPr[i - 1][j - 1])) % 1000000007;
    
    return nPr[n][r];
}

Last updated