栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode刷题之全排列(c++实现对数组的全排列,回溯法)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode刷题之全排列(c++实现对数组的全排列,回溯法)

  1. 题目描述:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
  2. 解题思路:
    本题是使用回溯算法来解决排列问题的标准题目(回溯算法适合解决组合和排列的问题),与组合问题不同的是,排列问题要注意顺序问题,因为排列问题,每次都要从头开始搜索,例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1,所以每次递归的时候不需要从startindex,而是直接从0开始,使用一个used数组来保存已经使用了哪些数。
  3. 解题代码:
class Solution {
public:
    vector> permute(vector& nums) {
        vector> res;
        vector current;
        //使用一个used数组来对使用过的位置进行记录(注意vector的初始化方法)
        vector used (nums.size(),false);
        backracking(res,nums,current,used);
        return res;
    }
    void backracking(vector> &res,vector nums,vector& current,vector& used){
        if(current.size() == nums.size()){
            res.push_back(current);
            return;
        }
        //因为排列问题每次都要从头开始搜索,所以不能使用startindex
        for(int i = 0;i < nums.size();i++){
            if(used[i] == true){
                continue;
            }
            used[i] = true;
            current.push_back(nums[i]);
            backracking(res,nums,current,used);
            current.pop_back();
            used[i] = false ;
        }
    }
};
  1. tips:
    对c++中的vector进行批量的初始化:vector res ( 要初始化的长度 ,值 );
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/588510.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号