Leetcode46全排列DFS
链接
题目大意:给定一个数组,求出所有的全排列。
分析
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相关推荐
- 回溯算法--LeetCode-46 全排列、LeetCode-47 全排列Ⅱ
LeetCode-46 全排列 题目链接:https://leetcode-cn.com/problems/permutations/ 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输 ...
- 组合数学(全排列)+DFS CSU 1563 Lexicography
题目传送门 1 /* 2 题意:求第K个全排列 3 组合数学:首先,使用next_permutation 函数会超时,思路应该转变, 4 摘抄网上的解法如下: 5 假设第一位是a,不论a是什么数,ax ...
- 第七届蓝桥杯决赛真题 - 凑平方数-全排列+dfs+set去重
题目: 凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够 办到的.比如:0, 36, 5948721再比如: 1098524736 1, 25, 6390784 0, 4, ...
- 全排列 DFS 回溯
//dfs全排列 #include<stdio.h> #include <string.h> char temp[5] = {'A','B','C','D'};//seed c ...
- 全排列—dfs(递归算法手动模拟)
目录 1.dfs全排列深度优先算法思路导图 2.dfs递归思想 3.主旨展现 4.详解手动模拟 5.例题来喽 5.1例题(1)来喽 5.2例题(2)来喽 5.3例题(3)来喽 1.dfs全排列深度优先 ...
- 全排列(dfs、小白、详细解释)
目录 主函数 用来排序的函数 详细过程 代码 从键盘输入一个没有重复元素的字符串,输出这个字符串所有字符的全排列 输入格式: 一个字符串,输入保证字符串中没有重复的字符,字符串的长度不超过10,字符串 ...
- leetcode46. 全排列(回溯)
给定一个 没有重复 数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2 ...
- wikioi 1294 全排列 dfs
1294 全排列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个n, 请输出n的所有全排列 输入描述 Input Desc ...
- leetcode46.全排列
给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1, ...
最新文章
- [JAVA #183; 0基础]:11.终结者-final
- DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异
- scala java抽象理解_Scala - 抽象类型和隐式参数解析
- 性能优化—代码层面优化
- 牛客多校3 - Operation Love(几何+叉积确定三点顺逆)
- CodeForces 757B Bash's Big Day(线性筛)
- 原来Java大数据才是真正的高富帅!
- 修改MySQL自动递增值
- 3D印花芭蕾舞鞋为舞者科学地保护双脚
- AndroidStudio_排坑指南_随时更新---Android原生开发工作笔记231
- [转]深入Linux网络核心堆栈
- 测试驱动开发、验收测试驱动开发和行为驱动开发
- 手把手带你将电脑音乐同步到iPhone 音乐
- LoadRunner11代理在Win10操作系统启动不起来,或者报错:该内存不能为written
- JS输入框统计文字数量,并过滤拼音时的统计
- 华为HCIP RS题库221 451-460题
- 微信中无法直接下载棋牌游戏类app的解决办法
- 《微信小程序开发实战》学习笔记chapter1微信小程序人门
- 4.vue常见指令v-for的基本使用
- apt-get -yqq install 与apt-get install的区别