给定一个无重复元素的整型数组,返回其所有排列。
输入: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]);
}
}
};
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)