关于排列/组合下的回溯问题

之前排列组合相关的问题通常直接采用递归来解决,从来没有深究过背后的思想;

 

递归和回溯问题主要是采用树的思想;

 

组合问题:

组合问题常常是给出n个元素,从中间选定k个元素,进行组合,有时还需要无重复组合;

所以根据遍历树的思想,可以认为是一个k层树,进行遍历即可;

 

 例如上图所示:

递归嵌套为两层,直接在每一层中选取元素即可,由于上图例子给出的是非重复,也就是[1,2]和[2,1]相同,所以只需要两层for循环即可,无需进行标志数组标记去重;

排列问题:

排列问题也是建立在遍历树基础上,和组合问题类似,但是值得注意的是必须要进行标记数组去重;

例如该题目:

https://leetcode-cn.com/problems/permutation-i-lcci/

 

例如上图的三个元素示例,显而易见,递归层数即为元素个数,每层递归需要传递相应的flag标记数组,以及嵌套层数,一旦满足要求,直接返回即可;

注意每层结束的时候需要重置标记位,以供下一层迭代和嵌套使用;

posted @ 2021-01-31 17:14  暮云林凌  阅读(64)  评论(0编辑  收藏  举报