程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> leetcode筆記:Combination Sum III

leetcode筆記:Combination Sum III

編輯:C++入門知識

leetcode筆記: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.

Ensure that numbers within the set are sorted in ascending order.

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]]

二. 題目分析

這道題題是組合之和系列的第三道題,跟之前兩道Combination Sum 組合之和,前面兩道題的聯系比較緊密,變化不大,而這道跟它們最顯著的不同就是這道題要求一個解中元素的個數為k。

實際上這道題是Combination Sum和Combination Sum II的綜合體,兩者雜糅到一起就是這道題的解法了。n是k個數字之和,如果n<0,則直接返回,如果n == 0,而且此時臨時組合temp中的數字個數正好為k,說明此時是一個合適的組合解,將其存入結果result中。

三. 示例代碼

#include 
#include 
using namespace std;

class Solution {
public:
    vector > combinationSum3(int k, int n) {
        vector > result;
        vector temp;
        combinationSum3DFS(k, n, 1, temp, result);
        return result;
    }

private:
    void combinationSum3DFS(int k, int n, int level, vector &temp, vector > &result) {
        if (n < 0) return;
        if (n == 0 && temp.size() == k) result.push_back(temp);
        for (int i = level; i <= 9; ++i) {
            temp.push_back(i);
            combinationSum3DFS(k, n - i, i + 1, temp, result);
            temp.pop_back();
        }
    }
};

四. 小結

Combination Sum系列是經典的DFS題目,還需要深入研究。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved