-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path491_non_decreasing_subsequences.py
41 lines (33 loc) · 1.24 KB
/
491_non_decreasing_subsequences.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
'''
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.
'''
class Solution:
'''
backtracking solution. At each index, either we can consider current element or ignore it.
complexity 2^n
'''
result = set()
input = []
def is_nondecreasing(self, cur_list):
if not cur_list or len(cur_list) == 1:
return False
cur = cur_list[0]
for i in cur_list:
if i < cur:
return False
cur = i
return True
def find_nondecreasing_subsequences(self, cur_list, idx):
if idx >= len(self.input):
if self.is_nondecreasing(cur_list):
self.result.add(tuple(cur_list))
return
if idx < len(self.input):
self.find_nondecreasing_subsequences(cur_list + [self.input[idx]], idx+1)
self.find_nondecreasing_subsequences(cur_list, idx+1)
def findSubsequences(self, nums: List[int]) -> List[List[int]]:
self.result = set()
self.input = nums
self.find_nondecreasing_subsequences([], 0)
return [list(i) for i in list(self.result)]