๐๐๐ 474. ไธๅ้ถ
2022ๅนด6ๆ9ๆฅๅฐไบ 1 ๅ้
๐๐๐ 474. ไธๅ้ถ
้พๅบฆ: ๐ ๐ ๐
้ฎ้ขๆ่ฟฐ
่งฃๆณ
class Solution {
public int findMaxForm(String[] strs, int m, int n) {
// ๆ่ทฏ๏ผ
// ่ๅ
้ฎ้ข
// dp[i] = dp[i - nums[j]] + 1, dp[i]
// ็ป่ฎกๆฏไธชๅญ็ฌฆไธฒ็ 0 & 1 ไธชๆฐ
int len = strs.length;
int[][] array = new int[len][2];
for(int i = 0; i < len; i ++) {
String s = strs[i];
int[] tmp = zeros(s);
array[i][0] = tmp[0];
array[i][1] = tmp[1];
}
// dp
int[][] dp = new int[m + 1][n + 1];
// ๅพ่ๅ
ไธญไธไธชไธชๆพๅ
ฅ็ฉๅ่ฟ่กๅฐ่ฏ
for(int j = 0; j < len; j ++) {
// ๅฝ่ๅ
็ๅฎน้้ไฝๅฐๆ็ง็จๅบฆไนๅ๏ผๅๅฐ็ๅฎน้่ฏๅฎไนๆพไธไธ่ฏฅ็ฉๅไบ๏ผๅ ๆญคๅณไฝฟๆญขๆ
for(int p = m; p - array[j][0] >= 0; p --) {
for(int q = n; q - array[j][1] >= 0; q --) {
dp[p][q] = Math.max(dp[p][q], dp[p - array[j][0]][q - array[j][1]] + 1);
}
}
}
return dp[m][n];
}
private int[] zeros(String s) {
int len = s.length();
int[] res = new int[] {0, 0};
for(char c : s.toCharArray()) {
if(c == '0') {
res[0] ++;
} else {
res[1] ++;
}
}
return res;
}
}