package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param matrix int整型二维数组 * @return int整型一维数组 */ func printMatrix( matrix [][]int ) []int { // write code here // 特殊条件排除 if len(matrix) == 0 { return nil } m, n := len(matrix), len(matrix[0]) ans := make([]int, m * n) // 结果切片起始索引 index := 0 // 利用边界收缩 left, right, up, down := 0, n-1, 0, m-1 for left <= right && up <= down { // 从左往右打印 for i := left; i <= right; i++ { ans[index] = matrix[up][i] index++ } // 上面一行打印完了,上边界收缩 if up = up + 1; up > down { break } // 从上往下打印 for i := up; i <= down; i++ { ans[index] = matrix[i][right] index++ } // 右侧一列打印完了,右边界收缩 if right = right-1; right < left { break } // 从右向左打印 for i := right; i >= left; i-- { ans[index] = matrix[down][i] index++ } // 下面一行打印完毕,下边界收缩 if down = down-1; down < up { break } // 从下往上打印 for i := down; i >= up; i-- { ans[index] = matrix[i][left] index++ } // 左边一列打印完毕,左边界收缩 if left = left+1; left > right { break } } return ans }
分圈进行打印,第一次循环,打印最外圈,分别收缩上、右、下、左边界,直至边界收缩到不合法时结束迭代,所以元素都已经加入到结果切片中了。