力扣第四十六题(全排列)详解
题目意思很好理解,给定数组的全排列,对于此种类型的题目,应该首先想到回溯,可以很轻松的解决该问题。下面给出两种回溯算法的题解。
方法一:
用一个bool型数组记录该数是否用过,当然为了避免数组中有重复数,我们记录的是数组的下标。然后用一个二维数组储存答案,一个一维数组储存每一次回溯时的结果,后面的步骤就是典型的回溯套路,进栈,回溯出栈,然后可以得到最后的结果。
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;used[i] = true;path.push_back(nums[i]);backtracking(nums,used);path.pop_back();used[i] = false;}}vector<vector<int>> permute(vector<int>& nums) {vector<bool> used(nums.size(),false);backtracking(nums,used);return result;}
};
方法二:
由于最后所求数组都是nums的全排列,所以我们可以直接将nums中的数每一个之间进行交换,然后回溯得到最后的结果。
class Solution {
public:void backtracking(vector<vector<int>>& result,vector<int>& nums,int index){if(index == nums.size()){result.push_back(nums);return;}for(int i = index;i < nums.size();i++){swap(nums[i],nums[index]);backtracking(result,nums,index + 1);swap(nums[i],nums[index]);}}vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> result;backtracking(result,nums,0);return result;}
};
力扣第四十六题(全排列)详解相关推荐
- 《LeetCode力扣练习》第46题 全排列 Java
<LeetCode力扣练习>第46题 全排列 Java 一.资源 题目: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 .你可以 按任意顺序 返回答案. 示例 1: 输 ...
- 【力扣638】 大礼包问题 JAVA全过程详解,绝对易懂
[前言]:本文讲解[力扣638 大礼包]的[动态规划]方法及其[记忆化搜索]的改进. 一.题目描述 在 LeetCode 商店中,有 n 件在售的物品.每件物品 i 都有对应的价格,也有一些大礼包以优 ...
- 系统学习NLP(二十六)--BERT详解
转自:https://zhuanlan.zhihu.com/p/48612853 前言 BERT(Bidirectional Encoder Representations from Transfor ...
- 《数据结构与算法》(十六)- “查找”详解
目录 前言 1. 查找概论 2. 顺序表查找 2.1 顺序表查找算法 2.2 顺序表找优化 3. 有序表查找 3.1 折半查找 3.2 插值查找 3.3 斐波那契查找 4. 线性索引查找 4.1 稠密 ...
- Go语言教程第十六集 GORM详解
GORM介绍和使用 什么是ORM Object Relational Mapping:对象关系映射 结构体 和 SQL数据库存在映射,这个时候就有了ORM语句 一句话说:就是将数据库中的表数据 和 结 ...
- [网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了Web安全学习路线,并实现了最简单的木马和病毒代码.这篇文章将详细讲述S ...
- 第四章第二十六题(金融应用:货币单位)(Financial application: monetary units)
第四章第二十六题(金融应用:货币单位)(Financial application: monetary units) *4.26(金融应用:货币单位)重写程序清单2-10,解决将float型值转换为i ...
- (补)算法训练第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和
代码随想录算法训练营第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 454.四数相加II 题目链接:四数相加II 参考:https://programmerc ...
- 猿人学题库十六题——js加密_表情包+sojson6.0——满天坑
猿人学题库十六题--js加密_表情包+sojson6.0 1. 首先 进入 浏览器的开发者工具, 进去后首先还是 无线debug ,找到 debugg 对应的行数,右击选择 never pause ...
最新文章
- win10商店打不开_PS打不开Raw格式?更新ACR新方式!【第05期 三分钟聊摄影】
- 浏览器支持java_为什么我下载了java并提示浏览器不支持j
- boost::sort模块实现弦平面稳定测试
- 【锋利的Jquery】读书笔记五
- 关于原生AJAX和jQueryAJAX的编程
- javascript中addEventListener与removeEventListener
- Linux系统Web网站目录和文件安全权限设置
- win10连Android机,Windows10电脑可以和安卓手机无缝连接使用了,实用性干翻Mac-win10手机...
- opnet安装的问题
- rlm sql mysql.so_安装freeradius
- Android读取手机存储文件,android 手机存储文件夹学习
- 手机卫星定位系统_如何判断自己的手机是否支持北斗卫星定位功能,如何使用?...
- 基于JAVA EE的临床科室管理系统
- 算法教学 _ 决策树算法
- 九联UNT413A_S905L3A__AI语音_默认打开ADB_完美线刷固件包【可救砖】
- 东财《人际沟通与交往艺术》综合作业
- 使用pyhive:连接hive(python3+)
- The connection for the USB device '###' was unsuccessful. The device is currently in use
- 关键路径--经典算法
- 网新恒天2014校园招聘笔试编程题
热门文章
- TiFlink: 使用 TiKV 和 Flink 实现强一致的物化视图
- WPS添加下划线,文字尾部不显示下划线问题解决(一个So stupid问题)
- java for 代表什么意思_java中的for是什么意思
- processon画类图和时序图
- 如何解决“504 Gateway Time-out”错误
- React Native学习速记
- Prometheus 通过钉钉告警
- ctfshow-29-170
- python蒙特卡洛算法模拟赌博模型
- java访问excel表格_Java读取excel表格(示例代码)