题目描述: 输入二维数组[[1,2,3],[4,5,6], [7,8,9]]
, 输出[1,2,3,5,9,8,7,4,5]
;
代码实现:
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;
}
理清楚,思路很简单就实现了。
二维数组的题目再来看一个吧
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
代码实现:
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;
}