【LeetCode】46. Permutations(C++)
阿新 • • 發佈:2018-12-02
地址:https://leetcode.com/problems/permutations/
題目:
Given a collection of distinct
integers, return all possible permutations.
**Example **:
理解:
和combination number差不多的思路,用backtracking。直接看程式碼吧,差別不大。
實現1:
來源:Share My C++ backtracksolution
class Solution { public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> res; vector<int> curr; vector<bool> flags(nums.size(), false); backtracking(nums, res, curr, flags); return res; } void backtracking(vector<int>& nums, vector<vector<int>>& res, vector<int>& curr, vector<bool>& flags) { if (nums.size() == curr.size()) { res.push_back(curr); } else { for (int i = 0; i < nums.size(); ++i) { if (flags[i]) continue; curr.push_back(nums[i]); flags[i] = true; backtracking(nums, res, curr,flags); flags[i] = false; curr.pop_back(); } } } };
實現2:
來源:My elegant recursive C++ solution with inline explanation
這裡有比較直觀的解釋:https://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/
class Solution { public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> res; backtracking(nums, res, 0); return res; } void backtracking(vector<int>& nums, vector<vector<int>>& res,int begin) { if (begin>=nums.size()) { res.push_back(nums); } else { for (int i = begin; i < nums.size(); ++i) { swap(nums[begin], nums[i]); backtracking(nums, res, begin + 1); swap(nums[begin], nums[i]); } } } };
果然人與人之間的差距比人與狗都大。。