首页 > 编程语言 >46. 全排列 ----- 回溯递归算法、交换函数

46. 全排列 ----- 回溯递归算法、交换函数

时间:2022-11-15 19:12:58浏览次数:67  
标签:used nums 46 res start vector ----- 回溯 path

46. 全排列

难度中等

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

 

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例 3:

输入:nums = [1]
输出:[[1]]

 

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同
    class Solution {
    public:    
        void backtrack(vector<vector<int>> & res, vector<int>& nums, int start ) {
          int n = nums.size();
          if (start == n) {
              res.emplace_back(nums);
              return;
          }
          for (int i = start; i < n; ++i) {
              swap(nums[start], nums[i]);
              backtrack(res, nums, start+1);
              swap(nums[start], nums[i]);
          }  
        }
    
        vector<vector<int>> permute(vector<int>& nums) {
            vector<vector<int>> res;
            backtrack(res, nums, 0);
            return res;
        }
    };

     

     不使用交换函数:

  • class Solution {
    public:
        vector<vector<int>> result;
        vector<int> path;
        void backtracking (vector<int>& nums, vector<bool>& used) {
            // 此时说明找到了一组
            if (path.size() == nums.size()) {
                result.push_back(path);
                return;
            }
            for (int i = 0; i < nums.size(); i++) {
                if (used[i] == true) continue; // path里已经收录的元素,直接跳过
                used[i] = true;
                path.push_back(nums[i]);
                backtracking(nums, used);
                path.pop_back();
                used[i] = false;
            }
        }
        vector<vector<int>> permute(vector<int>& nums) {
            result.clear();
            path.clear();
            vector<bool> used(nums.size(), false);
            backtracking(nums, used);
            return result;
        }
    };

     

标签:used,nums,46,res,start,vector,-----,回溯,path
From: https://www.cnblogs.com/slowlydance2me/p/16893547.html

相关文章

  • MySQL 源码解读之-语法解析(三)
    MySQL源码解读之-语法解析(三)在前两篇文章中已经讲述了bison如何解析sql语句并生成AST树。那么MySQL是如何和bison的程序关联起来的呢,并通过gdb调试一下。在MyS......
  • SpringBoot+@Validated实现参数验证(非空、类型、范围、格式等)-若依前后端导入Excel
    场景若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108278834SpringBoot+Vu......
  • windows--cmake与c++的使用教程(3)
    概述本文基于前文环境本节目标:编写用于创建c++动态库的cmake脚本1创建动态库关键语法:add_library2创建动态库核心脚本解释add_library(项目名称SHARED代......
  • go-商品服务-web
    一.项目初始化1.目录结构   C:.│config-debug.yaml│config-pro.yaml│main.go│├─api│└─goods│goods.go│├─config│......
  • python进阶3-操作excel
    参考:https://www.cnblogs.com/R-bear/p/15025822.html一、python操作excel,python操作excel使用xlrd、xlwt和xlutils模块,xlrd模块是读取excel的,xlwt模块是写excel的,xlutil......
  • 强化学习代码实战-07 ERINFORCEMENT 算法
    基于策略的学习方法:直接显示地学习一个目标策略策略梯度基于策略的方法基础基于策略的学习方法:寻找最优策略并最大化这个策略在环境的期望回报让策略更多地采样......
  • 07基础元器件-压敏电阻
     一、原理压敏电阻的工作原理:压敏电阻相当于一个可变电阻,它是并联于电路中。当电路正常工作时,它的阻抗很大,漏电流很小,相当于开路,对电路几乎没有影响。但当一个很高的突......
  • 离散数学左孝凌版本-集合论一
    集合论集合与关系集合的概念略集合表示法略集合相等定义基本概念子集空集全集幂集集合的运算序偶笛卡尔积总结关系及其表......
  • 煤矿安全设备认知仿真教学实现形象高效、专业的技能培训-深圳华锐视点
    技术日新月异,煤矿开采也从传统人工转为半机械操作,分为探测、采煤、掘进和钻凿等过程,因此煤矿工人在上岗作业前对常见的煤矿设备需要具备一定的认知、操作和维修知识技......
  • TCP—-SYN、ACK-、FIN、RST、PSH、URG-详解
    参考:https://blog.csdn.net/lamb7758/article/details/89147474三次握手图四次握手图三次握手Three-wayHandshake一个虚拟连接的建立是通过三次握手来实现的1.(B......