leetcode hot100 之 全排列

题目

给定一个无重复元素的整型数组,返回其所有排列。

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

原题链接:https://leetcode-cn.com/problems/permutations/

思路

直接上回溯。按排列的基本思路即可。先选第一位,再选第二位,直到所有位都选完。假设有 n 个数字,则第一位有 n 种选法,第二位有 n - 1 种选法…倒数第二位有2种选法,最后一位直接不用选了,直接push结果并返回。

  • 复杂度分析
    • 时间复杂度 O(n!)。所有排列即 A n n A^n_n Ann
    • 空间复杂度 O(n)。最多递归 n 层

代码

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

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展)