Skip to content

474.一和零

题解

js
/**
 * @param {string[]} strs
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var findMaxForm = function (strs, m, n) {
  // 初始化dp
  const dp = Array.from(Array(m + 1), () => Array(n + 1).fill(0));

  // 遍历物品
  for (let i = 0; i < strs.length; i++) {
    // 获取当前n对应的 1的数量(物品容量)
    const oneNum = strs[i].replace(/0/g, "").length;
    // 获取当前m对应的 0的数量(物品容量)
    const zeroNum = strs[i].replace(/1/g, "").length;
    // 遍历背包容量
    for (let x = m; x >= zeroNum; x--) {
      for (let y = n; y >= oneNum; y--) {
        dp[x][y] = Math.max(dp[x][y], dp[x - zeroNum][y - oneNum] + 1);
      }
    }
  }
  return dp[m][n];
};
/**
 * @param {string[]} strs
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var findMaxForm = function (strs, m, n) {
  // 初始化dp
  const dp = Array.from(Array(m + 1), () => Array(n + 1).fill(0));

  // 遍历物品
  for (let i = 0; i < strs.length; i++) {
    // 获取当前n对应的 1的数量(物品容量)
    const oneNum = strs[i].replace(/0/g, "").length;
    // 获取当前m对应的 0的数量(物品容量)
    const zeroNum = strs[i].replace(/1/g, "").length;
    // 遍历背包容量
    for (let x = m; x >= zeroNum; x--) {
      for (let y = n; y >= oneNum; y--) {
        dp[x][y] = Math.max(dp[x][y], dp[x - zeroNum][y - oneNum] + 1);
      }
    }
  }
  return dp[m][n];
};