这种increasing xxx 题真是老客户了.. 本题麻烦点在于不能重复, 但是和之前的那些 x sum的题目区别在于不能排序的
所以.... 我还是没搞定.
看了一个Java的思路是直接用set来存最终结果去重; 不太清楚Java的set自带比较函数? 用cpp的话就要为vector<int>编写hash函数...
cpp的方案有点特别, 每次递归的时候用一个哈希表记录有哪些数字已经用过了..很巧妙
class Solution { public: typedef vector<int> VI; typedef vector<VI> VVI; void traverse(VVI &out, VI &item, VI &src, int i) { unordered_set<int> si; for(int j=i;j<src.size();++j) { if((item.empty()||src[j]>=item.back())&&si.find(src[j])==si.end()) { item.push_back(src[j]); if(item.size()>1)out.push_back(item); traverse(out,item,src,j+1); item.pop_back(); si.insert(src[j]); } } } vector<vector<int>> findSubsequences(vector<int>& nums) { VVI ret; VI item; traverse(ret,item,nums, 0); return ret; } };