Contents
  1. 1. JAVA版:
  2. 2. GOlang版本:

腾讯模拟鄙视的一道题,我室友花了俩个小时做出来,然后又想到前俩天有同事推荐
我做这道题,所以今天上手实践了一下

解题思路:确定矩阵左上角和右下角的点的坐标(leftY,leftX)(rightY,rightX)
一圈圈打印,遍历一圈打印,然后将left++ right–
直到右下角的点跑到左上角的点的左边或上边
把每一次打印的拼起来


JAVA版:


public static void spiralOrderPrint(int[][] matrix) {
    int leftY = 0;
    int leftX = 0;
    int rightY = matrix.length - 1; 
    int rightX = matrix[0].length - 1; //定义了矩阵左上角和右下角点的坐标
    while (leftY <= rightY && leftX <= rightX) {
        // 调用printEdge方法循环向内打印每一圈
        printEdge(matrix, leftY++, leftX++, rightX--, rightY--); 
    }
}
//核心打印每一圈
//应该想到 俩个顶点有四个参数,可以确定我们遍历四个边时候的边界条件
//所以不能直接变化坐标的值
private static void printEdge(int[][] matrix, int leftY, int leftX, int rightX, int rightY) {
    //定义了时刻移动的点的坐标
    int curX = leftX;
    int curY = leftY;
    // A>>>>>>>>>B
    // ^         |
    // ^         |
    // D<<<<<<<<<C
    while (curX != rightX) {  //A -> B
        System.out.print(matrix[curY][curX] + " ");
        curX++;
    }
    while (curY != rightY) {  //B -> C
        System.out.print(matrix[curY][curX] + " ");
        curY++;
    }
    while (curX != leftX) {   //C -> D
        System.out.print(matrix[curY][curX] + " ");
        curX--;
    }
    while (curY != leftY) {   //D -> A
        System.out.print(matrix[curY][curX] + " ");
        curY--;
    }

}

public static void main(String[] args) {
    int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
    spiralOrderPrint(matrix);
}

GOlang版本:


func printMatrix(m [][]int) {
    lx := 0
    ly := 0
    rx := len(m[0]) - 1
    ry := len(m) - 1
    for lx <= rx && ly <= ry {
        printCircle(m,lx,ly,rx,ry)
        lx++
        ly++
        rx--
        ry--
    }
}
func printCircle(m [][] int ,lx,ly,rx,ry int){
    cx := lx
    cy := ly
    for ;cx!=rx;cx++ {
        fmt.Print(m[cy][cx])        
    }
    for ;cy != ry; cy++{
        fmt.Print(m[cy][cx])
    }
    for ;cx!=lx; cx --{
        fmt.Print(m[cy][cx])
    }
    for ;cy!=ly ; cy--{
        fmt.Print(m[cy][cx])
    }
}
Contents
  1. 1. JAVA版:
  2. 2. GOlang版本: