這題應該算是 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 4 years ago