Leetcode Java Increasing Subsequences
업데이트:
문제
코드
class Solution {
public List<List<Integer>> findSubsequences(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
this.dfs(nums, result, new ArrayList<>(), 0, Integer.MIN_VALUE);
return result;
}
private void dfs(int[] nums, List<List<Integer>> result, List<Integer> temp, int index, int value) {
if (index == nums.length) {
if (temp.size() >= 2) {
result.add(new ArrayList<Integer>(temp));
}
return;
}
if (nums[index] >= value) {
temp.add(nums[index]);
this.dfs(nums, result, temp, index + 1, nums[index]);
temp.remove(temp.size() - 1);
}
if (nums[index] != value) {
this.dfs(nums, result, temp, index + 1, value);
}
}
}
결과
설명
-
nums 내 최소 두 숫자 이상을 활용하여 모든 부분 배열을 구하는 문제이다.
-
모든 부분 배열을 넣을 result를 ArrayList로 초기화 한다.
-
4번에서 정의한 dfs(int[] nums, List<List
> result, List temp, int index, int value) 메서드를 temp에 새 ArrayList, index에 0, value에 int의 가장 작은 숫자를 이용하여 수행한다. - DFS 방식으로 결과를 탐색할 dfs(int[] nums, List<List
> result, List temp, int index, int value) 메서드를 정의한다. - index가 nums의 길이와 동일한 경우, temp의 길이가 2 이상이면 result에 temp를 새 ArrayList 객체로 넣어주고 수행을 중단한다.
- nums의 index번째 값이 value보다 큰 경우 아래를 수행하여 부분 배열을 찾아준다.
- temp에 해당 값을 넣어주고 index를 증가시키고 nums의 index번째 값을 value에 넣어 재귀 호출을 수행한다.
- 재귀 호출이 완료되면 temp에 위에서 넣은 값인 마지막 값을 제거해준다.
- nums의 index번째 값이 value와 같지 않은 경우, index를 증가시키고 value로 재귀 호출을 다시 수행하여 또 다른 부분 배열을 완성해준다.
- 모든 부분 배열을 넣은 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기