当前位置: 首页 > news >正文

77 全排列

全排列

    • 题解1 回溯(经典思路)
    • 题解2 正向思路——可作模板

给定一个不含重复数字的数组 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 中的所有整数互不相同

题解1 回溯(经典思路)

class Solution {
    vector<vector<int>> ret;
public:
    void backtrace(vector<int>& nums, int len){
        if(len == nums.size()){
            ret.push_back(nums);
            return;
        }
        for(int i = len; i < nums.size(); i++){
            swap(nums[i], nums[len]);
            backtrace(nums, len+1);
            swap(nums[i], nums[len]);
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
        backtrace(nums, 0);
        return ret;
    }
};

在这里插入图片描述

题解2 正向思路——可作模板

class Solution {
    vector<vector<int>> ret;
public:
    void backtrace(vector<int>& nums, deque<int>& track, vector<bool>& used){
        if(track.size() == nums.size()){
            ret.push_back(vector<int>(track.begin(), track.end()));
            return;
        }
        for(int i = 0; i < nums.size(); i++){
        // 用过就跳过
            if(used[i]) continue;
        // 记录
            used[i] = true;
            track.push_back(nums[i]);
            backtrace(nums, track, used);
        // 去掉
            track.pop_back();
            used[i] = false;
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
    	// 双向queue
        deque<int> track;
        // 记录是否使用过(不需要len来记录加到哪了)
        vector<bool> used(nums.size(), false);
        backtrace(nums, track, used);
        return ret;
    }
};

在这里插入图片描述

相关文章:

  • 考虑温度影响的vumat子程序在木材受火后强度分析中的应用
  • RK3568-clock
  • 使用 @antfu/eslint-config 配置 eslint (包含兼容uniapp方法)
  • 【JAVA学习笔记】46 - (43)第十一章作业
  • PHP 同城服务共享茶室小程序系统是如何实现的?
  • PyTorch入门学习(六):神经网络的基本骨架使用
  • sass和 scss的区别?
  • 如何查找特定基因集合免疫基因集 炎症基因集
  • 竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
  • EdgeCloudSim官方Sample运行——Windows+IntelliJ IDEA+Matlab
  • 网络入门基础
  • 测开(自动化测试selenium(WebDriver API))
  • SQL-正则表达式和约束
  • input改造文件上传,el-table的改造,点击上传,拖拽上传,多选上传
  • 设计模式(15)组合模式
  • 双链表找相交结点
  • 1-多媒体通信概述
  • 274. H 指数
  • 计算机网络【CN】IPV4报文格式
  • 升级 Xcode 15模拟器 iOS 17.0 Simulator(21A328) 下载失败
  • 重磅金融政策密集发布!一文梳理这场国新办发布会
  • 一揽子十条货币政策措施出炉:降准降息,设立五千亿服务消费与养老再贷款
  • 前瞻|中俄元首今年将首次面对面会晤,专家:国际变局中构建更坚韧的合作架构
  • 马上评|比起奇葩论文,更可怕的是“水刊”灰产
  • 医生李某某饮酒上班?重庆长寿区人民医院:正在调查,将严肃处理
  • 刘翔的赛会纪录被改写,田径钻石赛在赛场内外交出精彩答卷