Skip to content

Commit e12a2f6

Browse files
committed
feat: add solutions to lc problem: No.1277
No.1277.Count Square Submatrices with All Ones
1 parent f5166d3 commit e12a2f6

File tree

6 files changed

+263
-20
lines changed

6 files changed

+263
-20
lines changed

solution/1200-1299/1277.Count Square Submatrices with All Ones/README.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,108 @@
6262
<!-- 这里可写当前语言的特殊实现逻辑 -->
6363

6464
```python
65-
65+
class Solution:
66+
def countSquares(self, matrix: List[List[int]]) -> int:
67+
m, n = len(matrix), len(matrix[0])
68+
f = [[0] * n for _ in range(m)]
69+
ans = 0
70+
for i, row in enumerate(matrix):
71+
for j, v in enumerate(row):
72+
if v == 0:
73+
continue
74+
if i == 0 or j == 0:
75+
f[i][j] = 1
76+
else:
77+
f[i][j] = min(f[i - 1][j - 1], f[i - 1]
78+
[j], f[i][j - 1]) + 1
79+
ans += f[i][j]
80+
return ans
6681
```
6782

6883
### **Java**
6984

7085
<!-- 这里可写当前语言的特殊实现逻辑 -->
7186

7287
```java
88+
class Solution {
89+
public int countSquares(int[][] matrix) {
90+
int m = matrix.length;
91+
int n = matrix[0].length;
92+
int[][] f = new int[m][n];
93+
int ans = 0;
94+
for (int i = 0; i < m; ++i) {
95+
for (int j = 0; j < n; ++j) {
96+
if (matrix[i][j] == 0) {
97+
continue;
98+
}
99+
if (i == 0 || j == 0) {
100+
f[i][j] = 1;
101+
} else {
102+
f[i][j] = Math.min(f[i - 1][j - 1], Math.min(f[i - 1][j], f[i][j - 1])) + 1;
103+
}
104+
ans += f[i][j];
105+
}
106+
}
107+
return ans;
108+
}
109+
}
110+
```
111+
112+
### **C++**
113+
114+
```cpp
115+
class Solution {
116+
public:
117+
int countSquares(vector<vector<int>>& matrix) {
118+
int m = matrix.size(), n = matrix[0].size();
119+
int ans = 0;
120+
vector<vector<int>> f(m, vector<int>(n));
121+
for (int i = 0; i < m; ++i)
122+
{
123+
for (int j = 0; j < n; ++j)
124+
{
125+
if (matrix[i][j] == 0) continue;
126+
if (i == 0 || j == 0) f[i][j] = 1;
127+
else f[i][j] = min(f[i - 1][j - 1], min(f[i - 1][j], f[i][j - 1])) + 1;
128+
ans += f[i][j];
129+
}
130+
}
131+
return ans;
132+
}
133+
};
134+
```
73135
136+
### **Go**
137+
138+
```go
139+
func countSquares(matrix [][]int) int {
140+
m, n, ans := len(matrix), len(matrix[0]), 0
141+
f := make([][]int, m)
142+
for i := range f {
143+
f[i] = make([]int, n)
144+
}
145+
for i, row := range matrix {
146+
for j, v := range row {
147+
if v == 0 {
148+
continue
149+
}
150+
if i == 0 || j == 0 {
151+
f[i][j] = 1
152+
} else {
153+
f[i][j] = min(f[i-1][j-1], min(f[i-1][j], f[i][j-1])) + 1
154+
}
155+
ans += f[i][j]
156+
}
157+
}
158+
return ans
159+
}
160+
161+
func min(a, b int) int {
162+
if a < b {
163+
return a
164+
}
165+
return b
166+
}
74167
```
75168

76169
### **...**

solution/1200-1299/1277.Count Square Submatrices with All Ones/README_EN.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,106 @@ Total number of squares = 6 + 1 = <b>7</b>.
5656
### **Python3**
5757

5858
```python
59-
59+
class Solution:
60+
def countSquares(self, matrix: List[List[int]]) -> int:
61+
m, n = len(matrix), len(matrix[0])
62+
f = [[0] * n for _ in range(m)]
63+
ans = 0
64+
for i, row in enumerate(matrix):
65+
for j, v in enumerate(row):
66+
if v == 0:
67+
continue
68+
if i == 0 or j == 0:
69+
f[i][j] = 1
70+
else:
71+
f[i][j] = min(f[i - 1][j - 1], f[i - 1]
72+
[j], f[i][j - 1]) + 1
73+
ans += f[i][j]
74+
return ans
6075
```
6176

6277
### **Java**
6378

6479
```java
80+
class Solution {
81+
public int countSquares(int[][] matrix) {
82+
int m = matrix.length;
83+
int n = matrix[0].length;
84+
int[][] f = new int[m][n];
85+
int ans = 0;
86+
for (int i = 0; i < m; ++i) {
87+
for (int j = 0; j < n; ++j) {
88+
if (matrix[i][j] == 0) {
89+
continue;
90+
}
91+
if (i == 0 || j == 0) {
92+
f[i][j] = 1;
93+
} else {
94+
f[i][j] = Math.min(f[i - 1][j - 1], Math.min(f[i - 1][j], f[i][j - 1])) + 1;
95+
}
96+
ans += f[i][j];
97+
}
98+
}
99+
return ans;
100+
}
101+
}
102+
```
103+
104+
### **C++**
105+
106+
```cpp
107+
class Solution {
108+
public:
109+
int countSquares(vector<vector<int>>& matrix) {
110+
int m = matrix.size(), n = matrix[0].size();
111+
int ans = 0;
112+
vector<vector<int>> f(m, vector<int>(n));
113+
for (int i = 0; i < m; ++i)
114+
{
115+
for (int j = 0; j < n; ++j)
116+
{
117+
if (matrix[i][j] == 0) continue;
118+
if (i == 0 || j == 0) f[i][j] = 1;
119+
else f[i][j] = min(f[i - 1][j - 1], min(f[i - 1][j], f[i][j - 1])) + 1;
120+
ans += f[i][j];
121+
}
122+
}
123+
return ans;
124+
}
125+
};
126+
```
65127
128+
### **Go**
129+
130+
```go
131+
func countSquares(matrix [][]int) int {
132+
m, n, ans := len(matrix), len(matrix[0]), 0
133+
f := make([][]int, m)
134+
for i := range f {
135+
f[i] = make([]int, n)
136+
}
137+
for i, row := range matrix {
138+
for j, v := range row {
139+
if v == 0 {
140+
continue
141+
}
142+
if i == 0 || j == 0 {
143+
f[i][j] = 1
144+
} else {
145+
f[i][j] = min(f[i-1][j-1], min(f[i-1][j], f[i][j-1])) + 1
146+
}
147+
ans += f[i][j]
148+
}
149+
}
150+
return ans
151+
}
152+
153+
func min(a, b int) int {
154+
if a < b {
155+
return a
156+
}
157+
return b
158+
}
66159
```
67160

68161
### **...**

solution/1200-1299/1277.Count Square Submatrices with All Ones/Solution.cpp

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,16 @@ class Solution {
22
public:
33
int countSquares(vector<vector<int>>& matrix) {
44
int m = matrix.size(), n = matrix[0].size();
5-
vector<vector<int>> dp = matrix;
6-
for (int i = 0; i < m; i ++) {
7-
for (int j = 0; j < n; j++) {
8-
if (dp[i][j] && i > 0 && j > 0) {
9-
int edge = min(dp[i][j-1], dp[i-1][j]);
10-
if (edge > 0) {
11-
if (matrix[i-edge][j-edge]) {
12-
dp[i][j] = edge + 1;
13-
} else {
14-
dp[i][j] = edge;
15-
}
16-
}
17-
}
18-
}
19-
}
205
int ans = 0;
21-
for (int i = 0; i < m; i++) {
22-
for (int j = 0; j < n; j++) {
23-
ans += dp[i][j];
6+
vector<vector<int>> f(m, vector<int>(n));
7+
for (int i = 0; i < m; ++i)
8+
{
9+
for (int j = 0; j < n; ++j)
10+
{
11+
if (matrix[i][j] == 0) continue;
12+
if (i == 0 || j == 0) f[i][j] = 1;
13+
else f[i][j] = min(f[i - 1][j - 1], min(f[i - 1][j], f[i][j - 1])) + 1;
14+
ans += f[i][j];
2415
}
2516
}
2617
return ans;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
func countSquares(matrix [][]int) int {
2+
m, n, ans := len(matrix), len(matrix[0]), 0
3+
f := make([][]int, m)
4+
for i := range f {
5+
f[i] = make([]int, n)
6+
}
7+
for i, row := range matrix {
8+
for j, v := range row {
9+
if v == 0 {
10+
continue
11+
}
12+
if i == 0 || j == 0 {
13+
f[i][j] = 1
14+
} else {
15+
f[i][j] = min(f[i-1][j-1], min(f[i-1][j], f[i][j-1])) + 1
16+
}
17+
ans += f[i][j]
18+
}
19+
}
20+
return ans
21+
}
22+
23+
func min(a, b int) int {
24+
if a < b {
25+
return a
26+
}
27+
return b
28+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public int countSquares(int[][] matrix) {
3+
int m = matrix.length;
4+
int n = matrix[0].length;
5+
int[][] f = new int[m][n];
6+
int ans = 0;
7+
for (int i = 0; i < m; ++i) {
8+
for (int j = 0; j < n; ++j) {
9+
if (matrix[i][j] == 0) {
10+
continue;
11+
}
12+
if (i == 0 || j == 0) {
13+
f[i][j] = 1;
14+
} else {
15+
f[i][j] = Math.min(f[i - 1][j - 1], Math.min(f[i - 1][j], f[i][j - 1])) + 1;
16+
}
17+
ans += f[i][j];
18+
}
19+
}
20+
return ans;
21+
}
22+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def countSquares(self, matrix: List[List[int]]) -> int:
3+
m, n = len(matrix), len(matrix[0])
4+
f = [[0] * n for _ in range(m)]
5+
ans = 0
6+
for i, row in enumerate(matrix):
7+
for j, v in enumerate(row):
8+
if v == 0:
9+
continue
10+
if i == 0 or j == 0:
11+
f[i][j] = 1
12+
else:
13+
f[i][j] = min(f[i - 1][j - 1], f[i - 1]
14+
[j], f[i][j - 1]) + 1
15+
ans += f[i][j]
16+
return ans

0 commit comments

Comments
 (0)