我想找到 2D 列表/数组(矩阵)的重叠 2D 列表/数组(子矩阵),如下所示:
[
[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 9, 1, 2, 3 ]
]
在简单的情况下,我需要获取所有大小为 m 的重叠正方形,即
m x m
大小重叠的 2D 列表/数组。
例如,在上面的情况下,令 m 为 3。
我以命令的方式执行以下操作:
for (i in 0 until matrix.size - m) {
for (j in 0 until matrix.size - m) {
var q = mutableListOf<Int>() // can be a real 2D list, here a plain list to simplify
for (k in i..i + m) {
for (l in j..j + m) {
q.add(matrix[m][n])
}
}
// add an m size matrix to result here
}
}
我尝试了一些带有窗口(m)和使用 m 作为内部上限的映射范围的东西,但无法想出一个可行的解决方案。
如果您知道如何在 Kotlin 中以函数式方式制作它,请分享。 一句不是必须的,但会很棒。
如果我理解,在示例中你的输出应该是
[[1, 2, 3],
[5, 6, 7],
[9, 1, 2]]
[[2, 3, 4],
[6, 7, 8],
[1, 2, 3]]
所以
matrix_with = matrix.get(0).size
matrix_height = matrix.size
new_matrix = mutableListOf<MutableList<Int>>()
shift_with = matrix_with - m
shift_height = matrix_height - m
for(with in 0..shift_with){
for(height in 0..shift_height){
for(with in 0..m){
for(height in 0..m){
new_matrix[i][j] = matrix[i][j]
}
}
}
}
没有尝试是否有效,但我认为这就是逻辑