474.Ones and Zeroes
题目描述:In the computer world, use restricted resource you have to generate maximum benefit is what we always want to pursue.
For now, suppose you are a dominator of m
0sand n1srespectively. On the other hand, there is an array with strings consisting of only0sand1s.Now your task is to find the maximum number of strings that you can form with given m
0sand n1s. Each0and1can be used at most once.Note:
- The given numbers of
0sand1swill both not exceed100 - The size of given string array won’t exceed
600.
- The given numbers of
Example 1:
Input: Array = {"10", "0001", "111001", "1", "0"}, m = 5, n = 3 Output: 4 Explanation: This are totally 4 strings can be formed by the using of 5 0s and 3 1s, which are “10,”0001”,”1”,”0”Example 2:
Input: Array = {"10", "0", "1"}, m = 1, n = 1 Output: 2 Explanation: You could form "10", but then you'd have nothing left. Better form "0" and "1".题目大意:给定一个只包含0与1的字符数组array,给定m表述0最多出现的次数,给定n表示1最多出现的次数,问在给定的m与n的范围内,可以从array中选出的最多字符的个数。
思路:DP,0,1背包的变种,dp[i][j]表示m为i,n为j能找出的最多字符串的个数。
代码
package DP; /** * @author OovEver * 2017/12/25 9:59 */ public class LeetCode474 { public int findMaxForm(String[] strs, int m, int n) { int[][] dp = new int[m + 1][n + 1]; for (String s : strs) { int[] count = count(s); for(int i=m;i>=count[0];i--) { for(int j=n;j>=count[1];j--) { dp[i][j] = Math.max(dp[i][j], 1 + dp[i - count[0]][j - count[1]]); } } } return dp[m][n]; } /** * 统计s中0与1的数量 * @param s 要统计的字符串 * @return 字符串中0与1的数量 */ private int[] count(String s) { int[] res = new int[2]; for(int i=0;i<s.length();i++) { res[s.charAt(i) - '0']++; } return res; } }
LeetCode 474 解题报告
本文针对LeetCode上的474题 Ones and Zeroes 提供了解题思路及Java实现代码。该问题属于0-1背包问题的变种,通过动态规划的方法求解在给定0和1数量限制下能组成的最大字符串数量。
442

被折叠的 条评论
为什么被折叠?



