一和零
问题简述
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。
请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。
如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。
思路:自底向上递归+记忆化搜索
定义
dfs(i, rest_z, rest_o)
表示剩余容量为rest_z
,rest_o
情况下,前i
个元素的最大子集长度(子问题);【递归基】显然
i=0
时,返回0
;然后分是否加入当前元素,返回其中的最大值;
记得预处理所有字符串;
优化:通过递归转动态规划
实际上,记忆化搜索的速度要更快;
空间优化(略)
Last updated