Permutations

来源:互联网 发布:windows平板哪个好 编辑:程序博客网 时间:2024/06/07 16:18

题目描述:

Given a collection of distinct numbers, return all possible permutations.

For example,
[1,2,3] have the following permutations:

[  [1,2,3],  [1,3,2],  [2,1,3],  [2,3,1],  [3,1,2],  [3,2,1]]
解题思路:

把一个数组看成由两部分组成:第一部分为它的第一个元素,第二部分是后面的所有元素。
求整个数组的排列,可以看成两步:首先求所有可能出现在第一个位置的元素,
即把第一个字符和后面所有的元素交换。然后固定第一个元素,求后面所有元素的排列。
这个时候仍把后面的所有元素分成两部分:后面元素的第一个元素,以及这个元素之后的所有元素,
然后把第一个元素逐一和它后面的元素交换....

AC代码如下:

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


0 0
原创粉丝点击