From a030b3a8d1ced03be98512b13acb7eb9ca74ce3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= Date: Tue, 10 Sep 2019 20:01:43 +0800 Subject: [PATCH] Create 216. Combination Sum III.md --- solutions/216. Combination Sum III.md | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 solutions/216. Combination Sum III.md diff --git a/solutions/216. Combination Sum III.md b/solutions/216. Combination Sum III.md new file mode 100644 index 0000000..931fe1f --- /dev/null +++ b/solutions/216. Combination Sum III.md @@ -0,0 +1,36 @@ +# [216. Combination Sum III](https://leetcode.com/problems/combination-sum-iii/) + +# 思路 +从1-9十个数字中选出k个数字和为n, 要求返回所有组合. + +这种求所有组合的题一般就是DFS, 此题为了避免重复, 我们需要一个start标记, 每次从start开始进行递归DFS调用而不是每次都从1. +另外, 由于有了start标记, 我们也不需要使用visited数组了. + +# C++ +``` C++ +class Solution { +private: + void DFS(int start, int k, int n, vector>&res, vector&out){ + if(k < 0 || n < 0) return; + if(k == 0 || n == 0){ + if(n == k) res.push_back(out); + return; + } + // 每次从start开始进行递归调用而不是每次都从1 + for(int i = start; i <= 9; i++){ + out.push_back(i); + DFS(i + 1, k - 1, n - i, res, out); + out.pop_back(); + } + } + +public: + vector> combinationSum3(int k, int n) { + vector>res; + vectorout; + + DFS(1, k, n, res, out); + return res; + } +}; +```