题目意思很好理解,给定数组的全排列,对于此种类型的题目,应该首先想到回溯,可以很轻松的解决该问题。下面给出两种回溯算法的题解。

方法一:

用一个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;}
};

力扣第四十六题(全排列)详解相关推荐

  1. 《LeetCode力扣练习》第46题 全排列 Java

    <LeetCode力扣练习>第46题 全排列 Java 一.资源 题目: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 .你可以 按任意顺序 返回答案. 示例 1: 输 ...

  2. 【力扣638】 大礼包问题 JAVA全过程详解,绝对易懂

    [前言]:本文讲解[力扣638 大礼包]的[动态规划]方法及其[记忆化搜索]的改进. 一.题目描述 在 LeetCode 商店中,有 n 件在售的物品.每件物品 i 都有对应的价格,也有一些大礼包以优 ...

  3. 系统学习NLP(二十六)--BERT详解

    转自:https://zhuanlan.zhihu.com/p/48612853 前言 BERT(Bidirectional Encoder Representations from Transfor ...

  4. 《数据结构与算法》(十六)- “查找”详解

    目录 前言 1. 查找概论 2. 顺序表查找 2.1 顺序表查找算法 2.2 顺序表找优化 3. 有序表查找 3.1 折半查找 3.2 插值查找 3.3 斐波那契查找 4. 线性索引查找 4.1 稠密 ...

  5. Go语言教程第十六集 GORM详解

    GORM介绍和使用 什么是ORM Object Relational Mapping:对象关系映射 结构体 和 SQL数据库存在映射,这个时候就有了ORM语句 一句话说:就是将数据库中的表数据 和 结 ...

  6. [网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用

    这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了Web安全学习路线,并实现了最简单的木马和病毒代码.这篇文章将详细讲述S ...

  7. 第四章第二十六题(金融应用:货币单位)(Financial application: monetary units)

    第四章第二十六题(金融应用:货币单位)(Financial application: monetary units) *4.26(金融应用:货币单位)重写程序清单2-10,解决将float型值转换为i ...

  8. (补)算法训练第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和

    代码随想录算法训练营第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 454.四数相加II 题目链接:四数相加II 参考:https://programmerc ...

  9. 猿人学题库十六题——js加密_表情包+sojson6.0——满天坑

    猿人学题库十六题--js加密_表情包+sojson6.0 1.  首先 进入 浏览器的开发者工具, 进去后首先还是 无线debug ,找到 debugg 对应的行数,右击选择 never pause ...

最新文章

  1. win10商店打不开_PS打不开Raw格式?更新ACR新方式!【第05期 三分钟聊摄影】
  2. 浏览器支持java_为什么我下载了java并提示浏览器不支持j
  3. boost::sort模块实现弦平面稳定测试
  4. 【锋利的Jquery】读书笔记五
  5. 关于原生AJAX和jQueryAJAX的编程
  6. javascript中addEventListener与removeEventListener
  7. Linux系统Web网站目录和文件安全权限设置
  8. win10连Android机,Windows10电脑可以和安卓手机无缝连接使用了,实用性干翻Mac-win10手机...
  9. opnet安装的问题
  10. rlm sql mysql.so_安装freeradius
  11. Android读取手机存储文件,android 手机存储文件夹学习
  12. 手机卫星定位系统_如何判断自己的手机是否支持北斗卫星定位功能,如何使用?...
  13. 基于JAVA EE的临床科室管理系统
  14. 算法教学 _ 决策树算法
  15. 九联UNT413A_S905L3A__AI语音_默认打开ADB_完美线刷固件包【可救砖】
  16. 东财《人际沟通与交往艺术》综合作业
  17. 使用pyhive:连接hive(python3+)
  18. The connection for the USB device '###' was unsuccessful. The device is currently in use
  19. 关键路径--经典算法
  20. 网新恒天2014校园招聘笔试编程题

热门文章

  1. TiFlink: 使用 TiKV 和 Flink 实现强一致的物化视图
  2. WPS添加下划线,文字尾部不显示下划线问题解决(一个So stupid问题)
  3. java for 代表什么意思_java中的for是什么意思
  4. processon画类图和时序图
  5. 如何解决“504 Gateway Time-out”错误
  6. React Native学习速记
  7. Prometheus 通过钉钉告警
  8. ctfshow-29-170
  9. python蒙特卡洛算法模拟赌博模型
  10. java访问excel表格_Java读取excel表格(示例代码)