From a1359e0f3b2578197eff747441d816aaa9ae2a7b Mon Sep 17 00:00:00 2001 From: bqlin Date: Sat, 11 Dec 2021 18:23:33 +0800 Subject: [PATCH] =?UTF-8?q?0077.=E7=BB=84=E5=90=88=EF=BC=9A=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=8E=92=E7=89=88=EF=BC=8C=E8=A1=A5=E5=85=85Swift?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0077.组合.md | 42 +++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/problems/0077.组合.md b/problems/0077.组合.md index 16313cb8..6c74ab52 100644 --- a/problems/0077.组合.md +++ b/problems/0077.组合.md @@ -109,7 +109,7 @@ for (int i = 1; i <= n; i++) { 代码如下: -``` +```cpp vector> result; // 存放符合条件结果的集合 vector path; // 用来存放符合条件结果 ``` @@ -132,7 +132,7 @@ vector path; // 用来存放符合条件结果 那么整体代码如下: -``` +```cpp vector> result; // 存放符合条件结果的集合 vector path; // 用来存放符合条件单一结果 void backtracking(int n, int k, int startIndex) @@ -152,7 +152,7 @@ path这个数组的大小如果达到k,说明我们找到了一个子集大小 所以终止条件代码如下: -``` +```cpp if (path.size() == k) { result.push_back(path); return; @@ -248,7 +248,7 @@ void backtracking(参数) { 在遍历的过程中有如下代码: -``` +```cpp for (int i = startIndex; i <= n; i++) { path.push_back(i); backtracking(n, k, i + 1); @@ -411,7 +411,7 @@ class Solution: path.pop() backtrack(n, k, 1) return res -``` +``` 剪枝: ```python3 @@ -454,7 +454,7 @@ const combineHelper = (n, k, startIndex) => { path.pop() } } -``` +``` @@ -621,5 +621,35 @@ int** combine(int n, int k, int* returnSize, int** returnColumnSizes){ } ``` +## Swift + +```swift +func combine(_ n: Int, _ k: Int) -> [[Int]] { + var path = [Int]() + var result = [[Int]]() + func backtracking(_ n: Int, _ k: Int, _ startIndex: Int) { + // 结束条件,并收集结果 + if path.count == k { + result.append(path) + return + } + + // 单层逻辑 + // let end = n + // 剪枝优化 + let end = n - (k - path.count) + 1 + guard startIndex <= end else { return } + for i in startIndex ... end { + path.append(i) // 处理结点 + backtracking(n, k, i + 1) // 递归 + path.removeLast() // 回溯 + } + } + + backtracking(n, k, 1) + return result +} +``` + -----------------------