**一. 題目描述**
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 <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int> > combinationSum3(int k, int n) {
vector<vector<int> > result;
vector<int> temp;
combinationSum3DFS(k, n, 1, temp, result);
return result;
}
private:
void combinationSum3DFS(int k, int n, int level, vector<int> &temp, vector<vector<int> > &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題目,還需要深入研究。
- 前言
- 2Sum
- 3Sum
- 4Sum
- 3Sum Closest
- Remove Duplicates from Sorted Array
- Remove Duplicates from Sorted Array II
- Search in Rotated Sorted Array
- Remove Element
- Merge Sorted Array
- Add Binary
- Valid Palindrome
- Permutation Sequence
- Single Number
- Single Number II
- Gray Code(2016騰訊軟件開發筆試題)
- Valid Sudoku
- Rotate Image
- Power of two
- Plus One
- Gas Station
- Set Matrix Zeroes
- Count and Say
- Climbing Stairs(斐波那契數列問題)
- Remove Nth Node From End of List
- Linked List Cycle
- Linked List Cycle 2
- Integer to Roman
- Roman to Integer
- Valid Parentheses
- Reorder List
- Path Sum
- Simplify Path
- Trapping Rain Water
- Path Sum II
- Factorial Trailing Zeroes
- Sudoku Solver
- Isomorphic Strings
- String to Integer (atoi)
- Largest Rectangle in Histogram
- Binary Tree Preorder Traversal
- Evaluate Reverse Polish Notation(逆波蘭式的計算)
- Maximum Depth of Binary Tree
- Minimum Depth of Binary Tree
- Longest Common Prefix
- Recover Binary Search Tree
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal II
- Binary Tree Zigzag Level Order Traversal
- Sum Root to Leaf Numbers
- Anagrams
- Unique Paths
- Unique Paths II
- Triangle
- Maximum Subarray(最大子串和問題)
- House Robber
- House Robber II
- Happy Number
- Interlaving String
- Minimum Path Sum
- Edit Distance
- Best Time to Buy and Sell Stock
- Best Time to Buy and Sell Stock II
- Best Time to Buy and Sell Stock III
- Best Time to Buy and Sell Stock IV
- Decode Ways
- N-Queens
- N-Queens II
- Restore IP Addresses
- Combination Sum
- Combination Sum II
- Combination Sum III
- Construct Binary Tree from Inorder and Postorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal
- Longest Consecutive Sequence
- Word Search
- Word Search II
- Word Ladder
- Spiral Matrix
- Jump Game
- Jump Game II
- Longest Substring Without Repeating Characters
- First Missing Positive
- Sort Colors
- Search for a Range
- First Bad Version
- Search Insert Position
- Wildcard Matching