地址:https://leetcode.com/problems/permutations/
Given a collection of distinct
integers, return all possible permutations.
**Example **:
和combination number差不多的思路,用backtracking。直接看代码吧,差别不大。
来源:Share My C++ backtracksolution
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
vector<int> curr;
vector<bool> flags(nums.size(), false);
backtracking(nums, res, curr, flags);
return res;
}
void backtracking(vector<int>& nums, vector<vector<int>>& res, vector<int>& curr, vector<bool>& flags) {
if (nums.size() == curr.size()) {
res.push_back(curr);
}
else {
for (int i = 0; i < nums.size(); ++i) {
if (flags[i])
continue;
curr.push_back(nums[i]);
flags[i] = true;
backtracking(nums, res, curr,flags);
flags[i] = false;
curr.pop_back();
}
}
}
};
来源:My elegant recursive C++ solution with inline explanation
这里有比较直观的解释:https://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
backtracking(nums, res, 0);
return res;
}
void backtracking(vector<int>& nums, vector<vector<int>>& res,int begin) {
if (begin>=nums.size()) {
res.push_back(nums);
}
else {
for (int i = begin; i < nums.size(); ++i) {
swap(nums[begin], nums[i]);
backtracking(nums, res, begin + 1);
swap(nums[begin], nums[i]);
}
}
}
};
果然人与人之间的差距比人与狗都大。。