Leetcode 216. Combination Sum III 解题思路

题目:

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

Note:

  • All numbers will be positive integers.
  • The solution set must not contain duplicate combinations.

Example 1:

Input: k = 3, n = 7
Output: [[1,2,4]]

Example 2:

Input: k = 3, n = 9
Output: [[1,2,6], [1,3,5], [2,3,4]]

注意:这里给的例子都是 k= 3 的情况,而 k 也可以取正整数。

每个值的范围是[1, 9]

既然 k 是变量, 于是就可以采用递归的方法来写。另外,按照升序来进行排序会简单一些

代码如下:

vector<vector<int>> deepth(int k, int n, int begin)
    {
        if(k == 2 )
        {
            vector<vector<int>> ans;
            int z = 0;
            for(int i = begin; i <= n / k && i <= 9; ++i)
            {
                    z = n - i;
                    if(z <= i)
                        break;
                    if(z < 10)
                        ans.push_back(vector<int>{i, z});
            }
            return ans;
        }
        else
        {
            vector<vector<int>> final;
            vector<vector<int>> tmp;
            vector<int> mid;
            for(int i = begin; i < n / k && i <= 9; ++i)
            {
                tmp = deepth(k - 1, n - i, i + 1);
                for(size_t j = 0; j < tmp.size(); ++j)
                {
                    tmp[j].insert(tmp[j].begin(), i);
                }
                final.insert(final.end(), tmp.begin(), tmp.end());
                tmp.clear();
            }
            return final;
        }
    }

    vector<vector<int>> combinationSum3(int k, int n) {
        if(k == 1)
        {
            return vector<vector<int>>{vector<int>{1}};
        }
        vector<vector<int>> ans = deepth(k, n, 1);
        return ans;
    }

猜你喜欢

转载自blog.csdn.net/lijuanyujihui/article/details/85161666