链接
题目大意:给定一个数组,求出所有的全排列。
分析
DFS和回溯的方法。
回溯算法的核心
选择列表:表示当前可做的选择
路径:记录做过的选择
结束条件:遍历到树的底层,在这里是选择列表为空的时候。
回溯的代码框架

result=[]//存放结果
def backtrack(路径,选择列表){if 满足结束条件:result.add(路径)for 选择 in  选择列表:做选择backtrack(路径,选择列表);撤销选择}

全排列回溯解法:
分析
路径:track表示路径,也就是已经做出的选择。
选择列表:nums中哪些不在track中的元素,这里需要使用judge数组。

judge用来排除不合法的选择,也就是判断nums【i】是否已经出现在track中,如果出现过,就不能添加到路径,因为全排列没有重复的元素。false表示未进入到track中。

结束条件:nums中元素个数和track中元素个数相等。

class Solution {public:vector<vector<int> > result;vector<vector<int>> permute(vector<int>& nums) {vector<int> track;vector<bool> judge(nums.size(),false);//false表示未进入trackDFS(nums,track,judge);return result;}void DFS(vector<int> &nums,vector<int> &track,vector<bool> &judge){//exitif(nums.size()==track.size()){result.push_back(track);return;}for(int i=0;i<nums.size();i++){//make choice//怎么判断nums[i]在track里面if(judge[i])continue;track.push_back(nums[i]);judge[i]=true;DFS(nums,track,judge);//recall choicetrack.pop_back();judge[i]=false;}}
};

STL也提供了一种计算全排列的函数next_permutation
参考笔者的另一篇博文C++STL之next_permutation使用

直接用next_permutation来求解

class Solution {public:vector<vector<int>> permute(vector<int>& nums) {if(nums.size()==0) return {};sort(nums.begin(),nums.end());//从小到大排序vector<vector<int>> tmp;//结果数组do{tmp.push_back(nums);  //添加到结果数组中  }while(next_permutation(nums.begin(),nums.end()));//如果还有字典序更大的排列的话return tmp;}
};

Leetcode46全排列DFS相关推荐

  1. 回溯算法--LeetCode-46 全排列、LeetCode-47 全排列Ⅱ

    LeetCode-46 全排列 题目链接:https://leetcode-cn.com/problems/permutations/ 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输 ...

  2. 组合数学(全排列)+DFS CSU 1563 Lexicography

    题目传送门 1 /* 2 题意:求第K个全排列 3 组合数学:首先,使用next_permutation 函数会超时,思路应该转变, 4 摘抄网上的解法如下: 5 假设第一位是a,不论a是什么数,ax ...

  3. 第七届蓝桥杯决赛真题 - 凑平方数-全排列+dfs+set去重

    题目: 凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够 办到的.比如:0, 36, 5948721再比如: 1098524736 1, 25, 6390784 0, 4, ...

  4. 全排列 DFS 回溯

    //dfs全排列 #include<stdio.h> #include <string.h> char temp[5] = {'A','B','C','D'};//seed c ...

  5. 全排列—dfs(递归算法手动模拟)

    目录 1.dfs全排列深度优先算法思路导图 2.dfs递归思想 3.主旨展现 4.详解手动模拟 5.例题来喽 5.1例题(1)来喽 5.2例题(2)来喽 5.3例题(3)来喽 1.dfs全排列深度优先 ...

  6. 全排列(dfs、小白、详细解释)

    目录 主函数 用来排序的函数 详细过程 代码 从键盘输入一个没有重复元素的字符串,输出这个字符串所有字符的全排列 输入格式: 一个字符串,输入保证字符串中没有重复的字符,字符串的长度不超过10,字符串 ...

  7. leetcode46. 全排列(回溯)

    给定一个 没有重复 数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2 ...

  8. wikioi 1294 全排列 dfs

    1294 全排列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个n, 请输出n的所有全排列 输入描述 Input Desc ...

  9. leetcode46.全排列

    给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [   [1,2,3],   [1,3,2],   [2,1,3],   [2,3,1],   [3,1, ...

最新文章

  1. [JAVA #183; 0基础]:11.终结者-final
  2. DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异
  3. scala java抽象理解_Scala - 抽象类型和隐式参数解析
  4. 性能优化—代码层面优化
  5. 牛客多校3 - Operation Love(几何+叉积确定三点顺逆)
  6. CodeForces 757B Bash's Big Day(线性筛)
  7. 原来Java大数据才是真正的高富帅!
  8. 修改MySQL自动递增值
  9. 3D印花芭蕾舞鞋为舞者科学地保护双脚
  10. AndroidStudio_排坑指南_随时更新---Android原生开发工作笔记231
  11. [转]深入Linux网络核心堆栈
  12. 测试驱动开发、验收测试驱动开发和行为驱动开发
  13. 手把手带你将电脑音乐同步到iPhone 音乐
  14. LoadRunner11代理在Win10操作系统启动不起来,或者报错:该内存不能为written
  15. JS输入框统计文字数量,并过滤拼音时的统计
  16. 华为HCIP RS题库221 451-460题
  17. 微信中无法直接下载棋牌游戏类app的解决办法
  18. 《微信小程序开发实战》学习笔记chapter1微信小程序人门
  19. 4.vue常见指令v-for的基本使用
  20. apt-get -yqq install 与apt-get install的区别

热门文章

  1. js - prototype 继承
  2. Eclipse 常用最新插件.标记
  3. 推送通知服务【WP7学习札记之十三】
  4. Spring学习笔记-注入实战篇
  5. linux tomcat 进程杀掉_Linux下Tomcat的启动、关闭、杀死进程
  6. 用神经网络分类响尾蛇和牛蛙
  7. 神经网络粒子和物理粒子的一个本质差别
  8. 多分类神经网络与原子核
  9. 计算Be原子基态能级
  10. 用神经网络迭代次数曲线模拟原子光谱