题目描述:
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
解析:
1.如果数组为空,则返回空数组
2.定义四个边界及当前方向
3.当左边界小于等于右边界,且上边界小于等于下边界时,执行while循环:
按照右、下、左、上的顺序,依次将路径上的字符添加到结果里
4.while循环结束后,返回结果
Java:
public List<Integer> spiralOrder(int[][] matrix) { List<Integer> result = new ArrayList(); if(matrix.length == 0) { return result; } int top = 0; int bottom = matrix.length - 1; int left = 0; int right = matrix[0].length - 1; String direction = "right"; while(left <= right && top <= bottom) { if(direction == "right") { for(int i = left; i <= right; i++) { result.add(matrix[top][i]); } top++; direction = "down"; } else if(direction == "down") { for(int i = top; i <= bottom; i++) { result.add(matrix[i][right]); } right--; direction = "left"; } else if(direction == "left") { for(int i = right; i >= left ; i--) { result.add(matrix[bottom][i]); } bottom--; direction = "top"; } else if(direction == "top") { for(int i = bottom; i >= top; i--) { result.add(matrix[i][left]); } left++; direction = "right"; } } return result; }
JavaScript:
var spiralOrder = function(matrix) { if(matrix.length === 0) { return []; } let top = 0; let bottom = matrix.length - 1; let left = 0; let right = matrix[0].length - 1; let direction = "right"; let result = []; while(left <= right && top <= bottom) { if(direction === "right") { for(let i = left; i <= right; i++) { result.push(matrix[top][i]); } top++; direction = "down"; } else if(direction === "down") { for(let i = top; i <= bottom; i++) { result.push(matrix[i][right]); } right--; direction = "left"; } else if(direction === "left") { for(let i = right; i >= left; i--) { result.push(matrix[bottom][i]); } bottom--; direction = "top"; } else if(direction === "top") { for(let i = bottom; i >= top; i--) { result.push(matrix[i][left]); } left++; direction = "right"; } } return result; };