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

【leetcode】全排列 回溯法

46.全排列

46. 全排列 - 力扣(LeetCode) 

给定一个不含重复数字的数组 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 {
private:
    void swap(int* a,int* b)
    {
        int temp=*b;
        *b=*a;
        *a=temp;
    }
    void backtrack(vector<int>& nums,vector<vector<int>>& result,int n,int size)
    {
        if(n==size)
        {
            result.push_back(nums);
            return;
        }
        for(int i=n;i<size;i++)
        {
            swap(&nums[i],&nums[n]);
            backtrack(nums,result,n+1,size);
            swap(&nums[i],&nums[n]);
        }
    }
public:
    vector<vector<int>> permute(vector<int>& nums) {
        int size=nums.size();
        vector<vector<int>> result;
        backtrack(nums,result,0,size);
        return result;
    }
};

 47.全排列II

47. 全排列 II - 力扣(LeetCode)

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

示例 1:

输入:nums = [1,1,2]
输出:
[[1,1,2],
 [1,2,1],
 [2,1,1]]

示例 2:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
class Solution {
private:
    void swap(int* a,int* b)
    {
        int temp=*b;
        *b=*a;
        *a=temp;
    }
    int ok(vector<int>& nums,int i,int n)
    {
        if(i>n)
        {
            for(int j=n;j<i;j++)
            {
                if(nums[j]==nums[i])    return 0;
            }
        }
        return 1;
    }
    void backtrack(vector<int>& nums,vector<vector<int>>& result,int n,int size)
    {
        if(n==size-1)
        {
            result.push_back(nums);
            return;
        }
        for(int i=n;i<size;i++)
        {
            if(ok(nums,i,n))
            {
                swap(&nums[i],&nums[n]);
                backtrack(nums,result,n+1,size);
                swap(&nums[i],&nums[n]);
            }
        }
    }
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        int size=nums.size();
        vector<vector<int>> result;
        backtrack(nums,result,0,size);
        return result;
    }
};


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

相关文章:

  • 【VUE3】VUE组合式(响应式)API常见语法
  • 架构-微服务架构
  • 第六届国际科技创新学术交流大会暨新能源科学与电力工程国际(NESEE 2024)
  • 0BB定位胶具有优异的焊带粘接性和可靠性,助力客户降本增效
  • c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享
  • 探索 GAN 的演变之路
  • 高效制作定期Excel报表:自动化与模板化的策略
  • OpenCV 计算图像清晰度
  • 2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现
  • JavaApi.JDBC( 重点 )
  • 数据结构——用数组实现栈和队列
  • 鸿蒙操作系统(HarmonyOS)
  • html select下拉多选 修改yselect.js插件实现下拉多选,搜索,限制选中,默认回显等操作
  • c#基础练习71-75
  • 鸿蒙安全控件之位置控件简介
  • Git指令大全
  • 三维地形图计算软件(三)-原基于PYQT5+pyqtgraph旧代码
  • JSON数据转化为Excel及数据处理分析
  • 15.postgresql--jsonb 数组进行打平,过滤
  • 18:(标准库)DMA二:DMA+串口收发数据
  • 异或操作解决一些问题
  • 【附录】Rust国内镜像设置
  • 【腾讯云】AI驱动TDSQL-C Serveress 数据库技术实战营-如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图
  • Github 2024-11-26 Python开源项目日报Top10
  • C#里怎么样使用BinaryReader和BinaryWriter类?
  • MATLAB 中有关figure图表绘制函数设计(论文中常用)