使用递归的方式,逐步将后一个数字填充进去,所以第n个数字填充时有n个位置可放。注意在跳出低估的时候,要恢复之前的状态。
void fill(vector<vector<int> > &result, vector<int> &tmp, vector<int> &num, int step, int total){ if(step > total){ result.push_back(tmp); return; } int i, l = tmp.size(); for(i=0; i<step; i++){ tmp.insert(tmp.begin()+i, num[step-1]); fill(result, tmp, num, step+1, total); tmp.erase(tmp.begin()+i); } } vector<vector<int> > permute(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<int> > result; vector<int> tmp; tmp.reserve(1000); tmp.clear(); fill(result, tmp, num, 1, num.size()); return result; }