Подматрицы прямоугольного матрица
Помогите решить. Дано A прямоугольная матрица.
Написать функцию Solution,который найдет количество неповторяющийся 2x2 подматрицы в матрице A. Например в матрице А количество неповторяющийся 2x2 подматриц 6
A = [[1,2,1],[2,2,2],[2,2,2],[1,2,3],[2,2,1]]
- 1,2
2,2
- 2,1
2,2
- 2,2
2,2
- 2,2
1,2
- 2,2
2,3
- 2,3
2,1
Мой Код
function solution(x){
let arr = []
console.log(x)
for (var i = 0; i < x.length-1; i++) {
let line = []
for (var j = 0; j < x[i].length; j++) {
line.push(x[i][j],x[i][j+1],x[i+1][j],x[i+1][j+1])
arr.push(line)
if (x[i+1]==x.length-1) {
break
}
}
} return arr.length
}
[[1,2,1],[2,2,2],[2,2,2],[1,2,3],[2,2,1]] //6
[[9,9,9,9,9],[9,9,9,9,9],[9,9,9,9,9],[9,9,9,9,9],[9,9,9,9,9]] //1
[[3]] //0
[[3,4,5,6,7,8,9]] // 0
Ответы (1 шт):
x[i+1] == x.length-1 ? x[i+1] — это следующая строка матрицы (массив). x.length - 1 — какое-то число. Сравниваете массив с числом (+1 причина давать переменным более естественные названия).
У вас просят количество уникальных матриц 2x2. Тут полезно заметить, что по условию задачи не обязательно собирать именно матрицы 2х2. Главное научиться как-то сравнивать их. Поэтому можно сразу хранить в массиве не матрицы, а представляющие их строки, которые удобнее будет проверять на уникальность:
Test().forEach(mtx => console.log( solution(mtx) ) );
function solution(matrix) {
let arr = [];
for( let i = 0; i < matrix.length - 1; i++ ) {
let row_this = matrix[i];
let row_next = matrix[i + 1];
for( let j = 0; j < row_this.length - 1; j++ ) {
let _2x2 = String(
[
[row_this[j], row_this[j + 1]],
[row_next[j], row_next[j + 1]]
]
);
if( arr.includes( _2x2 ) ) continue;
arr.push( _2x2 );
}
}
return arr.length;
}
/***/
function Test() {
return [
[[1, 2, 1], [2, 2, 2], [2, 2, 2], [1, 2, 3], [2, 2, 1]], //6
[[9, 9, 9, 9, 9], [9, 9, 9, 9, 9], [9, 9, 9, 9, 9], [9, 9, 9, 9, 9], [9, 9, 9, 9, 9]], //1
[[3]], //0
[[3, 4, 5, 6, 7, 8, 9]] // 0
]
}
P.s.
console.log( [1, 2] === [1, 2] ); // false;
// Хранят одинаковые данные, но это два разных массива.
console.log( JSON.stringify( [1, 2] ) === JSON.stringify( [1, 2] ) ); // true;
console.log( JSON.stringify( [[1, 2], [3, 4]] ) ); // "[[1,2],[3,4]]"
// Для данной задачи сохранение скобок не играет роли.
console.log( String( [[1, 2], [3, 4]] ) ); // "1,2,3,4"
// этого достаточно для проверки на уникальность.