《LeetCode力扣练习》代码随想录——回溯算法(递增子序列—Java)
刷题思路来源于 代码随想录
491. 非递减子序列
-
回溯
class Solution { private List<Integer> path = new ArrayList<>(); private List<List<Integer>> result = new ArrayList<>(); public List<List<Integer>> findSubsequences(int[] nums) { backtrack(nums, 0); return result; } private void backtrack(int[] nums, int startIndex) { if (path.size() > 1) { result.add(new ArrayList<>(path)); } if (startIndex == nums.length) { return; } // Set<Integer> set = new HashSet<>(); int[] set = new int[201]; for (int i = startIndex; i < nums.length; i++) { // if ((path.size() > 0 && nums[i] < path.get(path.size() - 1)) || // set.contains(nums[i])) { if ((path.size() > 0 && nums[i] < path.get(path.size() - 1)) || set[nums[i] + 100] == 1) { continue; } set[nums[i] + 100] = 1; path.add(nums[i]); backtrack(nums, i + 1); path.remove(path.size() - 1); } return; } }