void PermutionData(vector<int>& data, int k, int m, vector<vector<int>>& result) { if (k == m) { result.push_back(data); return; } for (int i = k ; i <= m; i++) { if (isSwap(data, k, i)) { swap(data[i], data[k]); PermutionData(data, k + 1, m, result); swap(data[i], data[k]); } } }
void getPermutation(vector<int> &_nums, int _begin, vector< vector<int> > &_permutations) { const int numsSize = _nums.size(); if (_begin == numsSize - 1) { _permutations.push_back(_nums); return; } for (int curInd = _begin; curInd < numsSize; curInd++) { if (!isSwap(_nums, _begin, curInd)) { continue; } swap(_nums[_begin], _nums[curInd]); getPermutation(_nums, _begin + 1, _permutations); swap(_nums[_begin], _nums[curInd]); } }