原题:
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]
.
本题我的解题思路是用DP。我们可以看到规律,当n=1时,直接返回它本身[[1]]。当n=2时,是基于n=1的情况上,当现在num的两个值分别在1的情况下,在后面加上另一个数得到的。有两个解。当n=3时情况可以继续递推下去。
所以代码如下:
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int>> res;
if(num.empty()) return res;
if(num.size()==1) {
res.push_back(num);
return res;
}
for(int i=0; i<num.size(); i++){
int tmp = num[i];
vector<int> nnum = num;
//vector <int>::iterator it=nnum.begin();
nnum.erase(nnum.begin()+i);
vector<vector<int>> p = permute(nnum);
for (int j = 0; j<p.size(); j++){
p[j].push_back(tmp);
res.push_back(p[j]);
}
}
return res;
}
};
之前被reject很多次都是因为语法错误,可能还是因为对vector不太熟的缘故,比如res.push_back(p[j].push_back(tmp));这种用法是不被认可的。
不过这个算法感觉好像有点慢噢0 0。