题目
-
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16 -
则依次打印出数字1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10。
-
leetcode链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/
// 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
// 示例 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]
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function (matrix) {
if (!matrix.length || !matrix[0].length) return []
const result = []
const rowCounts = matrix.length
const columnCounts = matrix[0].length
let startRowIndex = 0
let startColumnIndex = 0
let endRowIndex = rowCounts - 1
let endColumnIndex = columnCounts - 1
while (startRowIndex < endRowIndex && startColumnIndex < endColumnIndex) {
// 上
for (let i = startColumnIndex; i < endColumnIndex; i++) {
result.push(matrix[startRowIndex][i])
}
// 右
for (let i = startRowIndex; i < endRowIndex; i++) {
result.push(matrix[i][endColumnIndex])
}
// 下
for (let i = endColumnIndex; i > startColumnIndex; i--) {
result.push(matrix[endRowIndex][i])
}
// 左
for (let i = endRowIndex; i > startRowIndex; i--) {
result.push(matrix[i][startColumnIndex])
}
startRowIndex++
startColumnIndex++
endRowIndex--
endColumnIndex--
}
if (startColumnIndex === endColumnIndex && startRowIndex < endRowIndex) {
for (let i = startRowIndex; i <= endRowIndex; i++) {
result.push(matrix[i][startColumnIndex])
}
} else if (startRowIndex === endRowIndex && startColumnIndex < endColumnIndex) {
for (let i = startColumnIndex; i <= endColumnIndex; i++) {
result.push(matrix[startRowIndex][i])
}
} else if (startRowIndex === endRowIndex && startColumnIndex === endColumnIndex) {
result.push(matrix[startRowIndex][startColumnIndex])
}
return result
}
console.log(spiralOrder([[6,9,7]]))