Leetcode Java Combination Sum IV
업데이트:
문제
코드
class Solution {
public int combinationSum4(int[] nums, int target) {
int[] dp = new int[target + 1];
Arrays.fill(dp, -1);
return this.resursive(nums, dp, target);
}
private int resursive(int[] nums, int[] dp, int target) {
if (target == 0) {
return 1;
} else if (target < 0) {
return 0;
} else if (dp[target] == -1) {
int result = 0;
for (int num : nums) {
result += this.resursive(nums, dp, target - num);
}
dp[target] = result;
}
return dp[target];
}
}
결과
설명
-
주어진 정수 배열인 nums가 주어지면 같은 위치의 값을 반복 사용하더라도 목표 target을 만들기 위한 고유 조합의 개수를 구하는 문제이다.
-
문제 풀이에 필요한 dp를 $target + 1$ 크기로 정의하고, 모든 값을 -1로 초기화한다.
-
4번에서 정의한 재귀 호출 메서드인 resursive(int[] nums, int[] dp, int target)를 호출한 결과를 주어진 문제의 결과로 반환한다.
-
재귀 호출을 통해 목표된 값을 탐색하기 위한 resursive(int[] nums, int[] dp, int target) 메서드를 정의한다.
- target이 0인 경우 목표 값을 완성한 경우이므로, 1을 반환한다.
- target이 0보다 작은 경우 목표값을 초과한 경우이므로, 0을 반환한다.
- dp의 target번째 값이 -1인 경우 해당 위치의 dp가 초기화되지 않았다는 의미이므로, 아래를 수행하여 값을 넣어준다.
- result에 0을 넣어준다.
- nums를 순회하여 result에 target에 num을 감소시키며 재귀 호출을 수행하여 개수를 넣어준다.
- dp의 target번째 위치에 result를 넣어준다.
- dp의 target번째 값을 반환하여 해당 target번째 값의 고유 조합의 개수를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기