【C++算法】DFS深度搜索—全排列问题

发布时间:2026/7/26 3:19:53

【C++算法】DFS深度搜索—全排列问题 本题取自LeetCode 37题 全排列2一 原题复现给定一个含重复数字的数组nums求出所有nums数组的所有排列方式不能出现重复二 思路分析本题需要利用DFS深度搜索来解题思路是这样的建立一个中间数组path来记录一轮数字的排列情况。如果没有访问就入且没有重复情况就入path并进入下一次递归。那么问题来了怎么去重呢先将nums数组进行排序判断目前的数是否和上一个数相同如果相同再判断上一个数在这一轮是否选择过如果没有选择就跳过目前的数字。我在此举个例子说明nums{1,1,2,3}。按照顺序前面的轮次出现了这样的情况{1,1,2,3}{1,1,3,2}......有某一轮从nums[2]开始那我们是否要选择呢试想如果选择了那么path{1}进入递归注意每一次递归都要会新开一次循环nums[1]在本轮没有被访问path{1,1}显然接下来就一定会出现重复的情况。其它细节在此就不做过多赘述了我会放在代码注释中。三 代码实现以上是我本题的思路代码了各位喜欢或者有帮助可以点点赞点点关注。后续我会更新跟多算法题算法思路。

相关新闻