Leetcode Java Count Number of Maximum Bitwise-OR Subsets
업데이트:
문제
코드
class Solution {
public int countMaxOrSubsets(int[] nums) {
int max = 0;
for (int num : nums) {
max |= num;
}
return this.dfs(nums, 0, 0, max);
}
private int dfs(int[] nums, int i, int num, int max) {
if (i == nums.length) {
return num == max ? 1 : 0;
} else {
return this.dfs(nums, i + 1, num | nums[i], max) + this.dfs(nums, i + 1, num, max);
}
}
}
결과
설명
-
nums의 부분 집합의 OR(‘ ’) 비트 연산을 수행한 결과가 최대인 부분 집합의 갯수를 구하는 문제이다. -
max는 OR 비트 연산의 값이 최대인 값을 구하기 위한 변수로, nums의 모든 값을 반복하여 OR의 최댓값을 넣어준다.
-
4번에서 정의한 dfs(int[] nums, int i, int num, int max)를 i에 0, num에 0을 채워 수행한 결과를 주어진 문제의 결과로 반환한다.
- DFS 방식으로 갯수를 계산할 dfs(int[] nums, int i, int num, int max) 메서드를 정의한다.
- i가 nums의 길이와 동일한 마지막 위치인 경우, num과 max가 동일하면 1을 아니면 0ㅇ을 반환한다.
- 위의 경우가 아니라면 아래의 두 결과를 더한 값을 반환한다.
- i의 위치에 $i + 1$을 넣고 num의 위치에 num과 nums[i]를 재귀 호출한 결과인 현재 값을 포함한 부분 배열의 경우에 대한 값.
- i의 위치에 $i + 1$을 넣어 재귀 호출 한 결과인 현재 값을 제외한 부분 배열의 경우에 대한 값.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기