@@ -261,8 +261,70 @@ public:
261
261
262
262
## 其他语言版本
263
263
264
-
265
264
### Java
265
+
266
+ 三维DP数组实现
267
+
268
+ ``` java
269
+ class Solution {
270
+ public int findMaxForm (String [] strs , int m , int n ) {
271
+ // / 数组有三个维度
272
+ // 第一个维度:取前面的几个字符串
273
+ // 第二个维度:0的数量限制(背包维度 1 容量)
274
+ // 第三个维度:1的数量限制(背包维度 2 容量)
275
+ int [][][] dpArr = new int [strs. length][m + 1 ][n + 1 ];
276
+
277
+ // / 初始化dpArr数组
278
+ // 计算第一个字符串的零数量和1数量
279
+ int zeroNum = 0 ;
280
+ int oneNum = 0 ;
281
+ for (char c : strs[0 ]. toCharArray()) {
282
+ if (c == ' 0' ) {
283
+ zeroNum++ ;
284
+ } else {
285
+ oneNum++ ;
286
+ }
287
+ }
288
+ // 当0数量、1数量都容得下第一个字符串时,将DP数组的相应位置初始化为1,因为当前的子集数量为1
289
+ for (int j = zeroNum; j <= m; j++ ) {
290
+ for (int k = oneNum; k <= n; k++ ) {
291
+ dpArr[0 ][j][k] = 1 ;
292
+ }
293
+ }
294
+ // / 依次填充加入第i个字符串之后的DP数组
295
+ for (int i = 1 ; i < strs. length; i++ ) {
296
+ zeroNum = 0 ;
297
+ oneNum = 0 ;
298
+ for (char c : strs[i]. toCharArray()) {
299
+ if (c == ' 0' ) {
300
+ zeroNum++ ;
301
+ } else {
302
+ oneNum++ ;
303
+ }
304
+ }
305
+ for (int j = 0 ; j <= m; j++ ) {
306
+ for (int k = 0 ; k <= n; k++ ) {
307
+ if (j >= zeroNum && k >= oneNum) {
308
+ // --if-- 当0数量维度和1数量维度的容量都大于等于当前字符串的0数量和1数量时,才考虑是否将当前字符串放入背包
309
+ // 不放入第i个字符串,子集数量仍为 dpArr[i - 1][j][k]
310
+ // 放入第i个字符串,需要在0维度腾出 zeroNum 个容量,1维度腾出 oneNum 个容量,然后放入当前字符串,即 dpArr[i - 1][j - zeroNum][k - oneNum] + 1)
311
+ dpArr[i][j][k] = Math . max(dpArr[i - 1 ][j][k], dpArr[i - 1 ][j - zeroNum][k - oneNum] + 1 );
312
+ } else {
313
+ // --if-- 无法放入第i个字符串,子集数量仍为 dpArr[i - 1][j][k]
314
+ dpArr[i][j][k] = dpArr[i - 1 ][j][k];
315
+ }
316
+ }
317
+ }
318
+ }
319
+ return dpArr[dpArr. length - 1 ][m][n];
320
+ }
321
+ }
322
+ ```
323
+
324
+
325
+
326
+ 二维DP数组实现
327
+
266
328
``` Java
267
329
class Solution {
268
330
public int findMaxForm (String [] strs , int m , int n ) {
@@ -682,3 +744,4 @@ public class Solution
682
744
<a href =" https://programmercarl.com/other/kstar.html " target =" _blank " >
683
745
<img src =" ../pics/网站星球宣传海报.jpg " width =" 1000 " />
684
746
</a >
747
+
0 commit comments