permutation2

 1 class Solution {
 2 public:
 3     vector<vector<int> > permuteUnique(vector<int> &num) {
 4         // Start typing your C/C++ solution below
 5         // DO NOT write int main() function
 6         vector<vector<int> > vec;
 7         if( num.empty() ) return vec;
 8         
 9         sort( num.begin(),num.end() );
10         vector<int>  tmp;
11         vector<bool> flag ( num.size(), true );
12         getPermute( vec, tmp, num , flag );
13         return vec;
14         
15     }
16     void getPermute(vector<vector<int> >& vec,vector<int>& tmp,  vector<int> &num,vector<bool>& flag)
17     {
18         if( tmp.size() == num.size() )
19         {
20             vec.push_back( tmp );
21             return;
22         }
23         for(int i=0;i< flag.size();i++)
24         {
25             if( !flag[i] )
26                 continue;
27             tmp.push_back( num[i] );
28             flag[i] = false;
29             getPermute( vec, tmp, num , flag );
30             flag[i] = true;
31             tmp.pop_back();
32             while( i+1<flag.size() && num[i] == num[i+1] ) i++;
33         }
34         
35     }
36 
37 };

 

posted on 2013-09-04 16:08  jumping_grass  阅读(156)  评论(0)    收藏  举报

导航