491. Increasing Subsequences

这种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;
    }
};
原文地址:https://www.cnblogs.com/lychnis/p/9309598.html