1 题目描述
2 解题思路
动态规划的想法来自于力扣题解,链接为 理解 三者取最小+1
解决方法:动态规划
此时已可得到递推公式
if (grid
[i
- 1][j
- 1] == '1') {
dp
[i
][j
] = min(dp
[i
- 1][j
- 1], dp
[i
- 1][j
], dp
[i
][j
- 1]) + 1;
}
作者:lzhlyle
链接:https
://leetcode
-cn
.com
/problems
/maximal
-square
/solution
/li
-jie
-san
-zhe
-qu
-zui
-xiao
-1-by
-lzhlyle
/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复杂度分析: 时间复杂度 O(height * width)O(height∗width) 空间复杂度 O(height * width)O(height∗width)
3 解决代码
解决方法:动态规划《Java代码》
class Solution {
public int maximalSquare(char[][] matrix
) {
if(matrix
== null
|| matrix
.length
< 1 || matrix
[0].length
< 1){
return 0;
}
int m
= matrix
.length
;
int n
= matrix
[0].length
;
int max
= 0;
int[][] dp
= new int[m
+ 1][n
+ 1];
for(int i
= 0; i
< m
; i
++){
for(int j
= 0; j
< n
; j
++){
if(matrix
[i
][j
] == '1'){
dp
[i
+ 1][j
+ 1] = Math
.min(dp
[i
][j
], Math
.min(dp
[i
+ 1][j
], dp
[i
][j
+ 1])) + 1;
max
= Math
.max(max
, dp
[i
+ 1][j
+ 1]);
}
}
}
return max
* max
;
}
}