TODO-力扣-46. 全排列

1.题目

题目地址(46. 全排列 - 力扣(LeetCode))

https://leetcode.cn/problems/permutations/

题目描述

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

2. 题解

2.1 全排列函数 next_permutation的使用(还有一个prev_permutation)

思路

next_permutation 可以按字典序排列获取下一个字典序稍大的组合, 如果不存在则返回

代码

  • 语言支持:C++

C++ Code:


class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> ans;
        do {
            ans.push_back(nums);
        } while (next_permutation(nums.begin(), nums.end()));
        return ans;
    }
};

复杂度分析

令 n 为数组长度。
由于它需要检查所有可能的排列来找到下一个排列。
在最坏的情况下,即当排列是按字典序排序的最后一个排列时,需要检查所有 n! 种可能的排列才能确定下一个排列

  • 时间复杂度:\(O(n!)\)
  • 空间复杂度:\(O(1)\)

2.2 回溯

思路

代码


复杂度分析

令 n 为数组长度。

  • 时间复杂度:\(O(n)\)
  • 空间复杂度:\(O(n)\)
posted @ 2024-04-30 09:46  DawnTraveler  阅读(7)  评论(0编辑  收藏  举报