-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathCount-Square-Submatrices-With-All-Ones.kt
85 lines (84 loc) · 2.91 KB
/
Count-Square-Submatrices-With-All-Ones.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class CountSquareSubmatriceswithAllOnesKotlin1277 {
// the larger square contains the small square
//
fun countSquares(matrix: Array<IntArray>): Int {
var count = 0
for (i in matrix.indices) {
for (j in matrix[0].indices) {
if (matrix[i][j] > 0 && i > 0 && j > 0) {
matrix[i][j] = 1 + minOf(
matrix[i - 1][j],
matrix[i][j - 1],
matrix[i - 1][j - 1]
)
}
count += matrix[i][j]
}
}
return count
}
/*
fun countSquares(matrix: Array<IntArray>): Int {
val dynamicProgramming = Array(matrix.size) { IntArray(matrix[0].size) }
var count = 0
for (i in dynamicProgramming.indices) {
for (j in dynamicProgramming[0].indices) {
when {
i > 0 && j > 0 && matrix[i][j] > 0 ->
dynamicProgramming[i][j] = minOf(
dynamicProgramming[i - 1][j],
dynamicProgramming[i][j - 1],
dynamicProgramming[i - 1][j - 1]
) + 1
else -> dynamicProgramming[i][j] = matrix[i][j]
}
count += dynamicProgramming[i][j]
}
}
return count
}
*/
/*
fun countSquares(matrix: Array<IntArray>): Int {
val dynamicProgramming = Array(matrix.size + 1) { IntArray(matrix[0].size + 1) }
for (i in 1 until dynamicProgramming.size) {
for (j in 1 until dynamicProgramming[0].size) {
dynamicProgramming[i][j] = matrix[i - 1][j - 1] +
dynamicProgramming[i - 1][j] +
dynamicProgramming[i][j - 1] -
dynamicProgramming[i - 1][j - 1]
}
}
val maxSide = minOf(matrix.size, matrix[0].size)
var count = 0
for (side in 1..maxSide) {
val targetSum = side * side
for (i in side until dynamicProgramming.size) {
for (j in side until dynamicProgramming[0].size) {
val currentSum = dynamicProgramming[i][j] -
dynamicProgramming[i - side][j] -
dynamicProgramming[i][j - side] +
dynamicProgramming[i - side][j - side]
if (currentSum == targetSum) {
++count
}
}
}
}
return count
}
*/
}
fun main() {
val solution = CountSquareSubmatriceswithAllOnesKotlin1277()
// 15
println(
solution.countSquares(
arrayOf(
intArrayOf(0, 1, 1, 1),
intArrayOf(1, 1, 1, 1),
intArrayOf(0, 1, 1, 1)
)
)
)
}