码迷,mamicode.com
首页 > 其他好文 > 详细

力扣-46-全排列

时间:2020-07-12 16:57:15      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:pac   ons   vat   没有   使用   int   http   vector   个数   

传送门

给定一个没有重复数字的数列,输入该数列的全排列。

这是一道回溯法(递归思想)的题目,可以通过递归来枚举所有的排列组合,为了避免重复使用某个数字,可以用flag标记每个数字是否使用。

代码方面,回溯法的框架如下,细品:

result = []
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择
/*递归*/
#include <cstring>
#include <string.h>
#include <algorithm>
using namespace std;

class Solution {
private:
    vector<int> path;  /*记录排列的path*/
    vector<int> nums; 
    vector<vector<int> > res;    /*全排列结果*/
    int flag[1005];
    
public:
    void dfs(int num){
        if (num == 0){ /*num表示差num个数字就形成一个排列*/
            res.push_back(path);
            return ;
        }
        for(int i = 0; i < nums.size(); i++){
            if(flag[i]) continue;
            flag[i] = 1; 
            path.push_back(nums[i]);
            dfs(num - 1);
            path.pop_back();
            flag[i] = 0;
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        this->nums = nums;
        memset(flag, 0, sizeof(flag));
        dfs(nums.size());
        return res;
    }
};

 

力扣-46-全排列

标签:pac   ons   vat   没有   使用   int   http   vector   个数   

原文地址:https://www.cnblogs.com/xiazhenbin/p/13288472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!