class Solution {
public:
    /**
     * @param nums: A list of integers.
     * @return: A list of permutations.
     */
    vector<vector<int> > permute(vector<int> nums) {
        // write your code here
        vector<vector<int> > results;
        if (nums.size() == 0) {
            results.push_back(vector<int>());
            return results;
        }
        vector<bool> visited(nums.size(), false);
        vector<int> current;
        dfsHelper(nums, current, visited, results);
        return results;
    }
    // 1. definition: get a permutation of numbers from nums that have not been visited before and put them into current;
    void dfsHelper(vector<int>& nums, vector<int>& current, vector<bool>& visited, vector<vector<int> >& results) {
        if (current.size() == nums.size()) {
            results.push_back(current);
            return;
        }

        for(int i = 0; i < nums.size(); i++) {
            if (visited[i]) {
                continue;
            }
            // In permutation, a spot can be occupied by any element from the candidate vector; that's why we always loop from index 0 till the end of the candidate vector so that each element can get the chanced to be selected for current spot;
            current.push_back(nums[i]);
            visited[i] = true;
            dfsHelper(nums, current, visited, results);
            current.pop_back();
            visited[i] = false;
        }
    }
};

results matching ""

    No results matching ""