Descripción del tema: matriz bidimensional de entrada [[1,2,3],[4,5,6], [7,8,9]]
, salida [1,2,3,5,9,8,7,4,5]
;
implementación del código:
function helper (m, result) {
if(m.length===0) {
return;
}
// m,length>=1, 矩阵中至少有一行
let arr1 = m.shift();//除数组的第一项
let arr2 = m.pop();// 移除最后一个数组元素 arr2可能是undefined
// 1. 正序输出最上层
for(let i = 0; i < arr1.length; i++){
result.push(arr1[i]);
}
// 2.正序输出最右层
if(m.length !== 0) {
// 输出每一行最后一个元素
for(let i=0; i < m.length; i++) {
if(m.length !== 0) {
result.push(m[i].pop());
}
}
}
// 3.逆序输出最下面层
if(arr2) {
for(let i = arr2.length-1; i >= 0; i--) {
result.push(arr2[i]);
}
}
// 4.逆序输出最左侧一层
if(m.length>0) {
//输出每一行元素的第一个元素
for(let i = 0; i < m.length; i++) {
result.push(m[i].shift())
}
}
helper(m, result);
}
function _pint(arr) {
let res = [];
if(arr.length===0) {
return arr;
}
helper(arr, res);
return res;
}
Claramente, la idea es muy simple de lograr.
Echemos otro vistazo al tema de las matrices bidimensionales.
Descripción del tema: en una matriz bidimensional (cada matriz unidimensional tiene la misma longitud), cada fila se ordena en orden creciente de izquierda a derecha y cada columna se ordena en orden creciente de arriba a abajo. Complete una función, ingrese una matriz bidimensional y un número entero, y determine si la matriz contiene el número entero.
Código:
function Find(target, array) {
//从最右上角开始确定一个点开始比较
let i = 0;
let j = array[i].length - 1;//将最右边的列作为定点
while (i < array.length && j >= 0) {
if (array[i][j] < target) {
i++;
} else if (array[i][j] > target) {
j--;
} else {
return true;
}
}
return false;
}