1464. The K-th Combination

很巧妙的办法,
还有一个求 组合数目的方法
Code(Language:C++)
class Solution {
public:
    /**
     * @param n: The integer n
     * @param k: The integer k
     * @return: Return the combination
     */
    vector<int> getCombination(int n, int k) {
         vector<vector<int>> C(n+1, vector<int>(n+1, 0));
        for (int i = 0; i <= n; ++i) {
            C[i][0] = C[i][i] = 1;
        }
        // Compute C(m, n) using C(m, n) = C(m-1, n-1)+C(m-1, n).
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j < i; ++j) {
                C[i][j] = C[i-1][j-1] + C[i-1][j];
            }
        }
        
        vector<int> ans;
        int curr_index = 1;
        for (int i = 1; i <= n/2; ++i) {
            int base = C[n-curr_index][n/2-i];
            // Search for next digit in ans.
            while (k > base) {
                curr_index++;
                base += C[n-curr_index][n/2-i];
            }
            base -= C[n-curr_index][n/2-i];
            k -= base;
            ans.push_back(curr_index);
            curr_index++;
        }
        return ans;
    }
};

Comments

Popular posts from this blog

Amazon OA 763. Partition Labels

1427. Split Array into Fibonacci Sequence