简单题也不是那么简单。 right, down, left, up 用来记录每次循环到哪,每次都会进行一个改变;i, j 代表在原矩阵中的坐标;while 中的 if 用于判断终止。

function printMatrix(matrix)
{
    // write code here
    let right = matrix[0].length - 1;
    let down = matrix.length - 1;
    let left = 0;
    let up = 1;
    let arr = []
    let [i, j] = [0, 0];
    // 考虑只有一行的情况
    
    if (down == 0) {
        return matrix[0];
    }
    // 考虑只有一列的情况
    
    if (right == 0) {
        for (let i = 0; i < down + 1; i++) {
            arr.push(matrix[i][0]);
        }
        return arr;
    }
    
    while (arr.length != (matrix[0].length) * (matrix.length)) {
        // while循环里的if用于判断终止
        
        if (j - 1 == right) {
            break;
        }
        for (; j <= right; j++) {
            arr.push(matrix[i][j]);
        }
        i += 1;
        j -= 1;
        right -= 1;
        if (i - 1 == down) {
            break;
        }
        for (; i <= down; i++) {
            arr.push(matrix[i][j]);
        }
        j -= 1;
        i -= 1;
        down -= 1;
        if (j + 1 == left) {
            break;
        }
        for (; j>= left; j--) {
            arr.push(matrix[i][j]);
        }
        i -= 1;
        j += 1;
        left += 1;
        if (i + 1 == up) {
            break;
        }
        for (; i >= up; i--) {
            arr.push(matrix[i][j]);
        }
        j += 1;
        i += 1;
        up += 1;
    }
    return arr;
    
}
module.exports = {
    printMatrix : printMatrix
};