顺时针打印矩阵(java递归实现)

思路

从最外层开始用4个for循环,分别从左到右,从上到下,从右到左,最后从下到上打印。接着 x,y坐标都 +1开始递归调用,打印第二层,以此类推
下面测试4个不同行列的矩阵 5x5,4x4, 5x4, 4x5

public static void main(String[] args) {
            int matrix0[][] = 
                {
                 { 1,   2,  3,  4,  5   },
                 { 6,   7,  8,  9,  10  },
                 { 11,  12, 13, 14, 15  },
                 { 16,  17, 18, 19, 20  },
                 { 21,  22, 23, 24, 25  }
                };
            int matrix1[][] = 
                {
                 { 1,   2,   3,   4  },
                 { 5,   6,   7,   8  },
                 { 9,   10,  11,  12 },
                 { 13,  14,  15,  16 }
                };
            int matrix2[][] = 
                {
                 { 1,   2,   3,   4  },
                 { 5,   6,   7,   8  },
                 { 9,   10,  11,  12 },
                 { 13,  14,  15,  16 },
                 { 17,  18,  19,  20 }
                };
            int matrix3[][] = 
                {
                 { 1,   2,  3,  4,  5   },
                 { 6,   7,  8,  9,  10  },
                 { 11,  12, 13, 14, 15  },
                 { 16,  17, 18, 19, 20  }
                };
            print(0, 0, matrix0);
            print(0, 0, matrix1);
            print(0, 0, matrix2);
            print(0, 0, matrix3);
     }
public static void print(int x, int y, int matrix[][]) {

        int v = matrix.length;

        int p = matrix[0].length;

        if (x >= v / 2 && y >= p / 2) {
            
            if (v % 2 != 0 && p % 2 != 0) {
                System.out.print(matrix[x][y]);
            }
            System.out.println();// 换行
            return;
        }

        for (int i = x; i < p - x; i++) {
            System.out.print(matrix[y][i] + ",");
        }

        int q = p - x - 1;
        for (int j = y + 1; j < v - y; j++) {
            System.out.print(matrix[j][q] + ",");
        }

        int w = v - y - 1;
        for (int k = q - 1; k >= x; k--) {
            System.out.print(matrix[w][k] + ",");
        }

        for (int l = w - 1; l > y; l--) {
            System.out.print(matrix[l][x] + ",");
        }
        print(++x, ++y, matrix);
    }

打印结果为:

1,2,3,4,5,10,15,20,25,24,23,22,21,16,11,6,7,8,9,14,19,18,17,12,13
1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10,
1,2,3,4,8,12,16,20,19,18,17,13,9,5,6,7,11,15,14,10,
1,2,3,4,5,10,15,20,19,18,17,16,11,6,7,8,9,14,13,12
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,415评论 0 2
  • 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 ...
    wuzhiguo阅读 1,289评论 0 0
  • 文/一枚回形针 前两天,父亲难得说他想吃焖猪手。原来,他是在网上看到别人把猪手做的很诱人,就挑起了他的一丝食欲,想...
    zy子悦阅读 711评论 4 9
  • 目录 线程状态 线程池 线程安全 Java Memory Model Volatile Sychornized R...
    普通的程序员阅读 3,073评论 0 7
  • 如果她一直哭,会不会有个人给她递一包纸巾? 37秒前,她走进这家中式的咖啡厅。这家店装潢是80年代的风格,上海老式...
    幔幔不慢慢阅读 292评论 2 0