leetcode416. Partition Equal Subset Sum

제목 요구
Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.

Note:
1.Each of the array element will not exceed 100.
2.The array size will not exceed 200.
Example 1:

Input: [1, 5, 11, 5]

Output: true

Explanation: The array can be partitioned as [1, 5, 5] and [11].
Example 2:

Input: [1, 2, 3, 5]

Output: false

Explanation: The array cannot be partitioned into equal sum subsets.

전체 정수 가 아 닌 빈 배열 이 있다 고 가정 하고 그 중의 숫자 를 두 부분 으로 나 누 어 두 부분의 숫자 와 똑 같은 것 을 확보한다.
아이디어 와 코드
이것 은 0 - 1 가방 문제 와 똑 같 습 니 다. 01 가방 문 제 는 n 개의 물품 이 있다 고 가정 하고 모든 물품 중 weight [i] 를 말 합 니 다. 가방 의 하중 이 k 라 고 가정 하고 물품 을 어떻게 선택 하여 가방 의 하중 을 가장 크게 하 는 지 물 어 봅 니 다.여기 서 문 제 는 n 개의 물품 이 있 고 모든 물품 의 무 게 는 inpuut [i] 입 니 다. 물품 을 어떻게 고 르 느 냐 고 물 어보 면 가방 의 무 게 를 모든 물품 의 무게 와 일반 으로 만 들 수 있 습 니 다.
만약 에 우리 가 앞의 i 개 물품 이 중량 k 를 구성 할 수 있 는 지 를 알 고 있다 면 우 리 는 이 값 을 dpi 로 한다. 그러면 i + 1 개 물품 이 무 게 를 구성 할 수 있 는 지 여 부 는 dpi 와 dpi 에 달 려 있다. 즉, i + 1 개 물품 이 중량 k 를 구성 할 수 있 는 지 두 가지 상황 이 있다. 첫 번 째 는 i + 1 개 물품 을 선택 하면 앞의 i 개 물품 이 k - input [i + 1] 의 무 게 를 구성 하 는 지, 두 번 째 는 i + 1 개 물품 을 선택 하지 않 은 것 이다.앞의 i 개 아 이 템 이 k 의 무 게 를 구 성 했 는 지 직접 판단 합 니 다.
코드 는 다음 과 같 습 니 다:
    public boolean canParition(int[] nums) {
        int sum = 0;
        for(int n : nums) {
            sum += n;
        }
        if(sum % 2 != 0) return false;
        int half = sum / 2;
        boolean[][] sums = new boolean[nums.length+1][half+1];
        for(int i = 0 ; i<=nums.length ; i++) {
            for(int j = 0 ; j<=half ; j++) {
                if(i==0 && j==0){
                    sums[i][j] = true;
                }else if(i==0) {
                    sums[i][j] = false;
                }else if(j==0){
                    sums[i][j] = true;
                }else {
                    sums[i][j] = sums[i-1][j] || (nums[i-1] <= j ? sums[i-1][j-nums[i-1]] : false);
                }
            }
        }
        return sums[nums.length][half];
    }

좋은 웹페이지 즐겨찾기