Skip to content

背包问题

java
class Solution {
    /**
     * 背包问题
     */
    public boolean canPartition(int[] nums) {
        int sum = Arrays.stream(nums).sum();
        if (sum % 2 == 1) return false;
        sum /= 2;
        boolean[][] f = new boolean[nums.length+1][sum+1];
        f[0][0] = true;
        for (int i = 0; i < nums.length; i++) {
            f[i+1][0] = true;
            for (int j = 1; j <= sum; j++) {
                if (j >= nums[i]) {
                    f[i+1][j] = f[i][j - nums[i]];
                }
                f[i+1][j] |= f[i][j];
            }
        }
        return f[nums.length][sum];
    }
}

Personal Knowledge Base