416. 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:
Each of the array element will not exceed 100.
The array size will not exceed 200.

思路

  • 能被partition說明nums的總和是偶數;并且總和的一半,稱為maximum,就是partition過后,每一半的總和
  • 運用動態規劃,創建一個數組dp,記錄從0maximum間,每個數字是否能被其余數字加出來
    對于nums中的每個數字i,從后往前循環一遍dp中的數字j,范圍是maximumi
    如果j-i存在,則說明j值可以被湊出來,在dp中記錄1
    最后返回dp[maximum]==1
    def canPartition(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        if sum(nums) %2 != 0:
            return False
        maximum = sum(nums)//2
        dp = [0]*maximum
        dp.insert(0,1)
        for i in nums:
            for j in range(maximum, i - 1, -1):    #必須從后往前,否則會復用前面的數字
                if dp[j - i]:
                    dp[j] = 1
        return dp[maximum] == 1  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。