程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [LeetCode]Permutations II

[LeetCode]Permutations II

編輯:C++入門知識

[cpp] 
class Solution { 
//DFS  
//always let the next same element go first,   
//in such a case we can cut down half same permutations   
//generated by these same element  
//need more practice  
public: 
    vector<vector<int> > permuteUnique(vector<int> &num) { 
        // Start typing your C/C++ solution below  
        // DO NOT write int main() function  
        int n = num.size(); 
        if(0 == n) return vector<vector<int> >(); 
        sort(num.begin(), num.end()); 
        vector<bool> used(num.size(), false); 
        vector<vector<int>> ans; 
 
        vector<int> path; 
        permute_aux(n, used, path, ans, num); 
        return ans; 
    } 
 
    void permute_aux( int n, vector<bool>& used, vector<int>& path, vector<vector<int>>& ans, const vector<int>& num )  
    { 
        //throw std::exception("The method or operation is not implemented.");  
        if(0 == n)  
        { 
            ans.push_back(path); 
            return; 
        } 
        for (int i = 0; i < used.size(); ++i) 
        { 
            if(true == used[i] || (i != 0 && num[i] == num[i-1] && used[i-1])) 
                continue; 
            used[i] = true; 
            path.push_back(num[i]); 
            permute_aux(n-1, used, path, ans, num); 
            used[i] = false; 
            path.pop_back(); 
        } 
    } 
}; 

class Solution {
//DFS
//always let the next same element go first,
//in such a case we can cut down half same permutations
//generated by these same element
//need more practice
public:
 vector<vector<int> > permuteUnique(vector<int> &num) {
  // Start typing your C/C++ solution below
  // DO NOT write int main() function
  int n = num.size();
  if(0 == n) return vector<vector<int> >();
  sort(num.begin(), num.end());
  vector<bool> used(num.size(), false);
  vector<vector<int>> ans;

  vector<int> path;
  permute_aux(n, used, path, ans, num);
  return ans;
 }

 void permute_aux( int n, vector<bool>& used, vector<int>& path, vector<vector<int>>& ans, const vector<int>& num )
 {
  //throw std::exception("The method or operation is not implemented.");
  if(0 == n)
  {
   ans.push_back(path);
   return;
  }
  for (int i = 0; i < used.size(); ++i)
  {
   if(true == used[i] || (i != 0 && num[i] == num[i-1] && used[i-1]))
    continue;
   used[i] = true;
   path.push_back(num[i]);
   permute_aux(n-1, used, path, ans, num);
   used[i] = false;
   path.pop_back();
  }
 }
};

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved