Умова
Дана матриця А (умовно - зображення), необхідно відобразити зображення по горизонталі, а потім його інвертувати (мається на увазі перетворення вкладених масивів). Наприклад, відобразивши по горизонталі масив [1, 1, 0], отримаємо [0, 1, 1], а після інверсії (заміна кожного значення на протилежне) - [1, 0, 0]. Метод має повернути перетворений масив (зображення).
Обмеження:
1 <= A.length = A[0].length <= 20
0 <= A[i][j] <= 1
Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resulting image.
Для того, щоб flip image horizontally means that each row of the image is reversed. Для прикладу, кріплення [1, 1, 0] horizontally результати в [0, 1, 1].
Для invert an image means that each 0 is replaced by 1, e each 1 is replaced by 0. For example, inverting [0, 1, 1] results in [1, 0, 0].
приклад
Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Explanation: Після відображення по горизонталі: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]]. Після інверсії: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]].
Рішення
Тут нема чого підходити до вирішення завдання у два етапи і спочатку робити відображення вихідного масиву, а потім, інверсію його значень. Достатньо одного циклу для перебору всіх рядків масиву, всередині якого, за допомогою вбудованих у js методів, ми зможемо виконати необхідні перетворення.
var flipAndInvertImage = function(A) {
// line traversal
for (let i = 0; i < A.length; i++) {
// horizontal flip of a nested array
const temp = A[i].reverse()
.map(item => item === 0 ? 1 : 0); // inversion
// overwriting the source array row
A[i] = temp
}
// return the modified array
return A;
};
З методами масивів можна познайомитись тут.