前言
###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.用地毯覆盖后的最少白色砖块
题目链接: 2209. 用地毯覆盖后的最少白色砖块 - 力扣(LeetCode)
题面:
附上灵神代码:
java
class Solution {
public int minimumWhiteTiles(String floor, int numCarpets, int carpetLen) {
int m = floor.length();
int[][] memo = new int[numCarpets + 1][m];
for (int[] row : memo) {
Arrays.fill(row, -1); // -1 表示没有计算过
}
return dfs(numCarpets, m - 1, floor.toCharArray(), memo, carpetLen);
}
private int dfs(int i, int j, char[] floor, int[][] memo, int carpetLen) {
if (j < carpetLen * i) { // 剩余砖块可以全部覆盖
return 0;
}
if (memo[i][j] != -1) { // 之前计算过
return memo[i][j];
}
int res = dfs(i, j - 1, floor, memo, carpetLen) + (floor[j] - '0');
if (i > 0) {
res = Math.min(res, dfs(i - 1, j - carpetLen, floor, memo, carpetLen));
}
return memo[i][j] = res; // 记忆化
}
}
后言
共勉
