491.Non-decreasing Subsequences === ###### tags: `Medium`,`Array`,`Hash Table`,`Backtracking`,`Bit Manipulation` [491. Non-decreasing Subsequences](https://leetcode.com/problems/non-decreasing-subsequences/) ### 題目描述 Given an integer array `nums`, return *all the different possible non-decreasing subsequences of the given array with at least two elements.* You may return the answer in **any order**. ### 範例 **Example 1:** ``` Input: nums = [4,6,7,7] Output: [[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]] ``` **Example 2:** ``` Input: nums = [4,4,3,2,1] Output: [[4,4]] ``` **Constraints**: * 1 <= `nums.length` <= 15 * -100 <= `nums[i]` <= 100 ### 解答 #### C++ ```cpp= class Solution { public: void dfs(vector<int>& nums, set<vector<int>>& ans, vector<int>& path, int i = 0) { if (i >= nums.size()) { if (path.size() >= 2) ans.insert(path); return; } if (path.size() == 0 || nums[i] >= path.back()) { path.push_back(nums[i]); dfs(nums, ans, path, i+1); path.pop_back(); } dfs(nums, ans, path, i+1); } vector<vector<int>> findSubsequences(vector<int>& nums) { set<vector<int>> ans; vector<int> path; dfs(nums, ans, path); return vector(ans.begin(), ans.end()); } }; ``` > Backtracking走一遍就好 > [name=Yen-Chi Chen][time=Fri, Jan 20, 2023] #### Python ```python= class Solution: def findSubsequences(self, nums: List[int]) -> List[List[int]]: ans = set() def BT(path = [], i = 0): if i >= len(nums): if len(path) >= 2: ans.add(tuple(path)) return if not path or nums[i] >= path[-1]: BT(path + [nums[i]], i+1) BT(path, i+1) BT() return ans ``` > [name=Yen-Chi Chen][time=Fri, Jan 20, 2023] ### Reference [回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)