leetcode 491. 递增子序列

138 阅读1分钟

c++

class Solution {
public:
    void dfs(vector<int> &nums, vector<vector<int>> &ans, int deep, vector<int> buff) {
        if (buff.size() > 1) ans.push_back(buff);
        unordered_map<int, int> _map;
        for (int i = deep; i < nums.size(); i++) {
            if (_map.find(nums[i]) != _map.end()) continue; 
            if (buff.size() == 0 || nums[i] >= buff[buff.size() - 1]) {
                buff.push_back(nums[i]);
                _map[nums[i]] = 1;
                dfs(nums, ans, i + 1, buff);
                buff.pop_back();
            } 
        }
        return ;
    } 
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        vector<vector<int>> ans;
        dfs(nums, ans, 0, vector<int>());
        return ans;
    }
};

js

var findSubsequences = function(nums) {
    var ans = [], buff = [];
    function dfs(deepth) {
        if (buff.length > 1) ans.push(buff.slice());
        var map = new Map();
        for(var i = deepth; i < nums.length; i++) {
            if (map.has(nums[i])) continue;
            if (buff.length == 0 || nums[i] >= buff[buff.length - 1]) {
                map.set(nums[i], 1);
                buff.push(nums[i]);
                dfs(i + 1);
                buff.pop();
            }
        }
    }
    dfs(0);
    return ans;
};