| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 
							- type none struct{}
 
- func findSubsequencesDP(nums []int) (ans [][]int) {
 
- 	dp := make([][]int, 0)
 
- 	set := make(map[string]none)
 
- 	for _, i := range nums {
 
- 		for _, a := range dp {
 
- 			if a[len(a)-1] <= i {
 
- 				arr := append(a, i)
 
- 				key := arr2str(arr)
 
- 				if _, ok := set[key]; !ok {
 
- 					dp = append(dp, arr)
 
- 					ans = append(ans, arr)
 
- 					set[key] = none{}
 
- 				}
 
- 			}
 
- 		}
 
- 		key := arr2str([]int{i})
 
- 		if _, ok := set[key]; !ok {
 
- 			dp = append(dp, []int{i})
 
- 			set[key] = none{}
 
- 		}
 
- 	}
 
- 	return
 
- }
 
- func arr2str(arr []int) string {
 
- 	var sb strings.Builder
 
- 	for _, i := range arr {
 
- 		sb.WriteString(strconv.Itoa(i))
 
- 		sb.WriteRune(',')
 
- 	}
 
- 	return sb.String()
 
- }
 
- func findSubsequencesDFS(nums []int) (ans [][]int) {
 
- 	dfs(nums, len(nums), 0, make([]int, 0), &ans)
 
- 	return
 
- }
 
- func dfs(nums []int, n int, s int, cur []int, ans *[][]int) {
 
- 	set := make(map[int]bool)
 
- 	for i := s; i < n; i++ {
 
- 		if l := len(cur); l != 0 && nums[i] < cur[l-1] {
 
- 			continue
 
- 		} else if _, ok := set[nums[i]]; ok {
 
- 			continue
 
- 		}
 
- 		set[nums[i]] = true
 
- 		nxt := append(cur, nums[i])
 
- 		if 2 <= len(nxt) {
 
- 			*ans = append(*ans, nxt)
 
- 		}
 
- 		dfs(nums, n, i+1, nxt, ans)
 
- 	}
 
- }
 
 
  |