# 46 - Permutations

解法一 - Backtracking

這題應該算是 backtracking 的經典題,終止條件是 tmp 的長度跟 nums 一樣(表示所有數字都有列舉到),直接上程式碼:

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;
        vector<int> tmp;

        helper(nums, res, tmp);

        return res;
    }

private:
    void helper(vector<int>& nums, vector<vector<int>>& res, vector<int>& tmp) {
        if(tmp.size() == nums.size())
            res.push_back(tmp);

        for(int i=0; i<nums.size(); i++) {
            if(find(tmp.begin(), tmp.end(), nums[i]) != tmp.end())
                continue;

            tmp.push_back(nums[i]);
            helper(nums, res, tmp);
            tmp.pop_back();
        }
    }
};

Runtime: 8 ms, faster than 98.53% of C++ online submissions for Permutations. Memory Usage: 9.2 MB, less than 90.03% of C++ online submissions for Permutations.

Last updated