更新图片链接
This commit is contained in:
10
problems/0077.组合.md
Normal file → Executable file
10
problems/0077.组合.md
Normal file → Executable file
@@ -82,7 +82,7 @@ for (int i = 1; i <= n; i++) {
|
||||
|
||||
那么我把组合问题抽象为如下树形结构:
|
||||
|
||||

|
||||

|
||||
|
||||
可以看出这棵树,一开始集合是 1,2,3,4, 从左向右取数,取过的数,不再重复取。
|
||||
|
||||
@@ -126,7 +126,7 @@ vector<int> path; // 用来存放符合条件结果
|
||||
|
||||
从下图中红线部分可以看出,在集合[1,2,3,4]取1之后,下一层递归,就要在[2,3,4]中取数了,那么下一层递归如何知道从[2,3,4]中取数呢,靠的就是startIndex。
|
||||
|
||||

|
||||

|
||||
|
||||
所以需要startIndex来记录下一层递归,搜索的起始位置。
|
||||
|
||||
@@ -146,7 +146,7 @@ path这个数组的大小如果达到k,说明我们找到了一个子集大小
|
||||
|
||||
如图红色部分:
|
||||
|
||||

|
||||

|
||||
|
||||
此时用result二维数组,把path保存起来,并终止本层递归。
|
||||
|
||||
@@ -163,7 +163,7 @@ if (path.size() == k) {
|
||||
|
||||
回溯法的搜索过程就是一个树型结构的遍历过程,在如下图中,可以看出for循环用来横向遍历,递归的过程是纵向遍历。
|
||||
|
||||

|
||||

|
||||
|
||||
如此我们才遍历完图中的这棵树。
|
||||
|
||||
@@ -267,7 +267,7 @@ for (int i = startIndex; i <= n; i++) {
|
||||
|
||||
这么说有点抽象,如图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
图中每一个节点(图中为矩形),就代表本层的一个for循环,那么每一层的for循环从第二个数开始遍历的话,都没有意义,都是无效遍历。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user