在刷leetcode的时候又遇到了个问题:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
想了半天,貌似也没有什么规律,话说这道题真的是道简单的题目么,感觉有点打脸啊
image.png image.png
按照我的想法,其实就是按顺序取值,一共有四种操作, 从上到下操作,取 list[0] 的所有顺序值即1234,然后 取右值,即取所有剩下数组的 最后一个值。再按顺序取下值,最后倒序取左值。
那么结论来了,我只需要写这四种操作,然后迭代调用就可以完成这个边界值问题了。
由于OC 比较麻烦,讲道理的话还是JS比较简洁,还是按照JS来解决这个问题
//定义四个方向值,
var Direction = {
right : 0, //向右
bottom : 1, //向下
left : 2, //向左
up : 3, //向上
};
var spiralOrder = function(matrix) {
let resultList = [];
var result = iteration(resultList,matrix,Direction.right);
console.log(result);
return result;
};
var iteration = function(resultList,matrix,direction) {
if (!matrix) {
return resultList;
}
// 只有最后一个时,直接将其抛出
if (matrix.length == 0) {
return resultList;
}
let tempList = [];
switch (direction) {
case(Direction.right) :{
tempList = matrix.shift();
resultList = resultList.concat(tempList);
}
break;
case(Direction.bottom) :{
for (var i = 0; i < matrix.length; i++) {
var lastValue = matrix[i].pop();
// 解决数组为空的问题
if (typeof(lastValue) == "undefined") {
return resultList;
}
resultList.push(lastValue);
}
}
break;
case(Direction.left) :{
tempList = matrix.pop();
resultList = resultList.concat(tempList.reverse());
}
break;
case(Direction.up) :{
for (var i = matrix.length - 1; i >= 0; i--) {
var firstValue = matrix[i][0];
// 解决数组为空的问题
if (typeof(firstValue) == "undefined") {
return resultList;
}
matrix[i].shift();
resultList.push(firstValue);
}
}
break;
}
// 获取下一个方向
direction = (direction+1)%4;
return iteration(resultList,matrix,direction);
};
提交代码,执行效果如下:
image.png
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/filter-restaurants-by-vegan-friendly-price-and-distance
网友评论