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;
};