【Leetcode Daily】416分割等和子集
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个只有正整数的非空数组,要求是否能取出两个子集且这两个子集和相等。
思路分享
本质其实是问是否能找到一个和相当于总和一半的子集。首先总和为奇数不可能达成,然后尝试划分一下子问题。
对于本题,可以采用“选或不选”的思路,建立的数组f[i][j]的含义是,从数组的前 i 个数字选出合适的子集和为 j。
从后向前(从前向后应当也行)每个数字考虑选的时候,就把总和减去这个对应位置数字,同时下标减一,这样就得到了下一个子问题;不选,就直接下标减一,考虑下个数字,这就是另一个子问题。
子问题不断划分后,就要考虑边界,对于上面从后向前的顺序,最后下标到 0,如果此时剩余和为零,说明刚好满足,返回 True,其余情况不满足则 False
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!