Permutations 题解
题目来源:Permutations
> Given a collection of 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], and [3,2,1].
解题思路:
置换法
递归, 一个一个与第一个交换。
void dfs(vector<vector<int> > &result, vector<int> &num, int start)
{
if(start >= num.size()) // >= ">"also should be put in, for the last ele.
{
result.push_back(num);
return;
}
for(int i = start; i < num.size(); i++)
{
std::swap(num[i], num[start]);
dfs(result, num, start+1);
std::swap(num[i], num[start]);
}
}
vector<vector<int> > permute(vector<int> &num)
{
vector<vector<int> > result;
dfs(result, num, 0);
return move(result);
}
增量构造法
可以跟 combinations 类似, 一个一个往里面加。
void dfs(vector<vector<int> > &result, const vector<int> &num, vector<int> &path )
{
if(path.size() == num.size())
{
result.push_back(path);
return;
}
for(int i = 0; i < num.size(); i++)
{
if(std::find(path.begin(), path.end(), num[i]) == path.end())
{
path.push_back(num[i]);
dfs(result, num, path);
path.pop_back();
}
}
}
vector<vector<int> > permute(vector<int> &num)
{
vector<vector<int> > result;
vector<int> path;
dfs(result, num, path);
return move(result);
}
nextPermunation
参考 permutations-ii.
Last updated
Was this helpful?