class Solution {
public:
vector<vector<int> > permute(vector<int> nums) {
vector<vector<int>> results;
vector<int> soFar;
vector<bool> visited(nums.size(), false);
findAllPermutations(0, nums, visited, soFar, results);
return results;
}
void findAllPermutations(int i, vector<int>& nums, vector<bool>& visited, vector<int>& soFar, vector<vector<int>>& results
) {
if (soFar.size() == nums.size()) {
results.push_back(soFar);
}
for (int i = 0; i < nums.size(); i++) {
if (visited[i]) {
continue;
}
visited[i] = true;
soFar.push_back(nums[i]);
findAllPermutations(i, nums, visited, soFar, results);
visited[i] = false;
soFar.pop_back();
}
}
};