果然超时一次。
不过后来想了想,因为查重我每次都用的线性时间,所以很麻烦。
这个时候应该想到一种叫map的数据结构。
后来888ms过。
具体的map处理还需要自学和加强。
附上代码:
</p> <h1>include &lt;map&gt;</h1> <p>using namespace std; class Solution { public: vector&lt;vector&lt;int&gt;&gt; ans; map&lt;vector&lt;int&gt;,int&gt; markmap; bool flag[100000]; int sum; vector&lt;vector&lt;int&gt; &gt; permuteUnique(vector&lt;int&gt; &amp;num) { // Note: The Solution object is instantiated only once and is reused by each test case. ans.clear(); markmap.clear(); sum = num.size(); for(int i = 0;i &lt; sum;i++) { flag[i] = false; } for(int i = 0;i &lt; sum;i++) { flag[i] = true; vector&lt;int&gt; tmp(sum); tmp[0] = i; fun(tmp,1,num); flag[i] = false; } return ans; } void fun(vector&lt;int&gt;&amp;tmp,int k,vector&lt;int&gt; &amp;num) { if(k &gt;= sum) { vector&lt;int&gt; numtmp(sum); for(int i = 0;i &lt; sum;i++) { numtmp[i] = num[tmp[i]]; } map&lt;vector&lt;int&gt;,int&gt;::iterator l_it = markmap.find(numtmp); if(markmap.empty()) { ans.push_back(numtmp); markmap.insert(map&lt;vector&lt;int&gt;,int&gt;::value_type(numtmp, 590));<br /> } else { if(l_it == markmap.end()) { ans.push_back(numtmp); markmap.insert(map&lt;vector&lt;int&gt;,int&gt;::value_type(numtmp, 590)); } } return ; } for(int i = 0;i &lt; sum;i++) { if(!flag[i]) { flag[i] = true; tmp[k] = i; fun(tmp,k+1,num); flag[i] = false; } } } };