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

全排列(DFS)

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

 

class Solution {
    vector<vector<int>> ans;
public:
    vector<vector<int>> permute(vector<int>& nums) {
        int n=nums.size();
        
        dfs(nums, 0); 
        return ans; 
    }

    void dfs(vector<int>& nums, int i) {
        if (i == nums.size()) {   //当索引 i 达到 nums 的长度时,表示已生成一个完整的排列
            ans.push_back(nums); 
            return;  // 返回上一级递归
        }

        for (int j = i; j < nums.size(); j++) {
            swap(nums[i], nums[j]);  // 将 nums[j] 放到当前排列位置 i
            dfs(nums, i + 1);        // 递归生成下一个元素的排列
            swap(nums[i], nums[j]);  // 回溯,将 nums 恢复到交换前的状态
    }
};

 


http://www.kler.cn/a/387010.html

相关文章:

  • 深入探索:Scrapy深度爬取策略与实践
  • 传奇996_21——龙岭事件
  • 1111111111待修改--大流量分析(三)-BUUCTF
  • 【Linux】-学习笔记03
  • 使用Python实现定期从API获取数据并存储到数据库的完整指南
  • webpack loader全解析,从入门到精通(10)
  • 【MIT-OS6.S081笔记1】Chapter1阅读摘要:Operating system interfaces
  • Spring Boot的过滤器与拦截器的区别
  • 【C++ 滑动窗口】2134. 最少交换次数来组合所有的 1 II
  • Anaconda安装和环境配置教程(2024年11月9日)
  • Kafka 之事务消息
  • GJ Round (2024.10) Round 8~21
  • 鸿蒙多线程开发——Worker多线程
  • 安全见闻(网络安全篇)
  • Python爬虫如何处理验证码与登录
  • Python练习15
  • Qt 无法获取调试输出
  • SpringBoot助力的共享汽车业务优化系统
  • 【c++丨STL】vector模拟实现
  • JAVA 多线程之ForkJoin
  • 发现了NitroShare的一个bug
  • 关于vue如何监听route和state以及各自对应的实际场景
  • 103 - Lecture 1
  • Web前端开发--HTML语言
  • Conpair: 配对样本一致性concordance与污染contamination分析
  • LLMs之MemFree:MemFree的简介、安装和使用方法、案例应用之详细攻略