力扣---46.全排列

给定一个不含重复数字的数组 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 中的所有整数 互不相同
cpp 复制代码
class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> ans;
        ans.push_back(nums);
        int sum = 1;
        int num = nums.size();
        while(num >= 1){
            sum *= num;
            num--;
        }
        for(int j=0;j<sum-1;j++){
            int n = nums.size();  
            int i = n - 2;  
            
            // 从右向左找到第一个不满足升序的位置  
            while (i >= 0 && nums[i] >= nums[i + 1]) {  
                i--;  
            }
            if (i >= 0) {  
                // 从右向左找到第一个大于nums[i]的元素  
                int j = n - 1;  
                while (j > i && nums[j] <= nums[i]) {  
                    j--;  
                }  
                // 交换nums[i]和nums[j]  
                swap(nums[i], nums[j]);  
            }
            // 将i+1及其之后的部分翻转成升序  
            reverse(nums.begin() + i + 1, nums.end());
            ans.push_back(nums);
        }
        return ans;
    }
};
相关推荐
山甫aa8 小时前
二叉树算法-----从零开始的算法
数据结构·算法
OYangxf8 小时前
基于epoll的单线程Reactor:Tinyredis的网络层实现
c++·redis
睡觉就不困鸭8 小时前
第十七天 翻转字符串里的单词
数据结构·算法·哈希算法·散列表
ulias2128 小时前
leetcode热题 - 4
算法·leetcode·职场和发展
yinbinggang8 小时前
vmware安装虚拟机
c++
学术阿凡提8 小时前
Spring Boot 优雅实现异步调用:从入门到自定义线程池与异常处理
java·数据库·算法
圣保罗的大教堂8 小时前
leetcode 1559. 二维网格图中探测环 中等
leetcode
MicroTech20259 小时前
微算法科技(NASDAQ :MLGO)量子化边缘检测技术:重塑图像处理的新范式
图像处理·科技·算法
WolfGang0073219 小时前
代码随想录算法训练营 Day47 | 图论 part05
算法·图论
猿长大人9 小时前
算法 | 轮廓提取随笔 —— 关于像素、阈值和直觉的碎碎念
图像处理·算法