Оглавление статьи
- Вводная часть
- Переписать матрицу нулями
- Перевернутая матрица
- Повернутая матрица на 90 градусов
- Элементы матрицы по спирали
Вводная часть
Массивы - это фундаментальная структура данных в программировании, которая позволяет хранить и организовывать множество элементов одного типа в одной переменной. В этой статье мы рассмотрим решения базовых задач с массивом данных.
Переписать матрицу нулями
Рассмотрим решение задачи на замену 1 на 0 в столбцах и строках пересекающих 0.
Например:
[
[1,1,1,1],
[1,0,1,1],
[1,1,0,1],
[1,0,0,1]
]
=>
[
[1,0,0,1],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]
]
let matrix = [
[1,1,1,1],
[1,0,1,1],
[1,1,0,1],
[1,0,0,1],
]
let col = Array(matrix.length).fill(0)
let row = Array(matrix[0].length).fill(0)
for (let i = 0; i < row.length; i++) {
for (let j = 0; j < col.length; j++) {
if (matrix[i][j] === 0) {
row[i] = 1
col[j] = 1
}
}
}
for (let i = 0; i < row.length; i++) {
for (let j = 0; j < col.length; j++) {
if (row[i] || col[j]) {
matrix[i][j] = 0
}
}
}
/*
Новая матрица:
[\
[1,0,0,1],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]
]
*/
console.log('Новая матрица:', matrix)
Перевернутая матрица
Рассмотрим решение задачи на переворачивание матрицы.
Например:
[
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
]
=>
[
[13,14,15,16],
[9,10,11,12],
[5,6,7,8],
[1,2,3,4]
]
const arr = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
]
const res = []
for (let i = 0; i < arr.length; i++) {
res[i] = Array(arr.length).fill(0)
for (let j = 0; j < arr.length; j++) {
res[i][j] = arr[arr.length - 1 - i][j]
}
}
/*
Перевернутая матрица:
[
[13,14,15,16],
[9,10,11,12],
[5,6,7,8],
[1,2,3,4]
]
*/
console.log('Перевернутая матрица:', res)
Повернутая матрица на 90 градусов
Рассмотрим решение задачи на поворачивание матрицы на 90 градусов.
Например:
[
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
]
=>
[
[13,9,5,1],
[14,10,6,2],
[15,11,7,3],
[16,12,8,4]
]
const arr = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
]
const res = JSON.parse(JSON.stringify(arr))
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
res[j][i] = arr[arr.length - 1 - i][j]
}
}
/*
Повернутая матрица на 90 градусов:
[
[13,9,5,1],
[14,10,6,2],
[15,11,7,3],
[16,12,8,4]
]
*/
console.log('Повернутая матрица на 90 градусов:', res)
Вариант 2
const arr = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
]
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
const tmp = arr[i][j]
arr[i][j] = arr[j][i]
arr[j][i] = tmp
}
}
let p1 = 0
let p2 = arr.length - 1
while (p1 < p2) {
const tmp = arr[p1]
arr[p1] = arr[p2]
arr[p2] = tmp
p1++
p2--
}
/*
Повернутая матрица на 90 градусов:
[
[4,8,12,16],
[3,7,11,15],
[2,6,10,14],
[1,5,9,13]
]
*/
console.log('Повернутая матрица на 90 градусов:', arr)
Элементы матрицы по спирали
Рассмотрим решение задачи на разворачивание элементов матрицы по спирали.
Например:
[
[1,2,3,4,5,6],
[20,21,22,23,24,7],
[19,32,33,34,25,8],
[18,31,36,35,26,9],
[17,30,29,28,27,10],
[16,15,14,13,12,11],
]
=>
[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]
const arr = [
[1,2,3,4,5,6],
[20,21,22,23,24,7],
[19,32,33,34,25,8],
[18,31,36,35,26,9],
[17,30,29,28,27,10],
[16,15,14,13,12,11],
]
let n = arr.length // row
let m = arr[0].length // col
let left = 0
let right = m - 1
let top = 0
let bottom = n - 1
const res = []
while(top <= bottom && left <= right) {
// right
for (let i = left; i <= right; i++) {
res.push(arr[top][i])
}
top++
// bottom
for (let i = top; i <= bottom; i++) {
res.push(arr[i][right])
}
right--
// left
for (let i = right; i >= left; i--) {
res.push(arr[bottom][i])
}
bottom--
// top
for (let i = bottom; i >= top; i--) {
res.push(arr[i][left])
}
left++
}
// Разворачивание элементов матрицы: [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]
console.log('Разворачивание элементов матрицы:', res)