Java 实现打印螺旋矩阵

标签: 剑指offer 算法 螺旋矩阵 顺时针打印矩阵 Java
6人阅读 评论(0) 收藏 举报
分类:

输入一个矩阵,以顺时针的顺序依次打印出每一个数字

例如,如果输入如下矩阵: 

1    2    3 

8    9    4

7     6    5

则依次打印出数字1,2,3,4,5,6,7,8,9

    private static List<Integer> getMatrix(int[][] matrix) {
        if (matrix == null || matrix.length == 0) {
            return null;
        }
        int row = matrix.length, col = matrix[0].length;
        //存放结果
        List<Integer> result = new ArrayList<>(row * col);
        // 其实列和结束列
        int startCol = 0, endCol = col - 1;
        // 其实行和结束行
        int startRow = 0, endRow = row - 1;
        while (startCol <= endCol && startRow <= endRow) {
            // 1. 遍历startRow行的各列数据,从左到右,遍历结束,对startRow+1,表示该行数据已经遍历过
            if (startCol <= endCol && startRow <= endRow) {
                for (int i = startCol; i <= endCol; i++) {
                    result.add(matrix[startRow][i]);
                }
                ++startRow;
            }
            // 2. 遍历endCol列的各行数据,从上到下,遍历结束,对endCol-1,表示该列数据已经遍历过
            //    因为前一步遍历startRow行后,将要从当前行的最后一列所在列开始遍历
            if (startCol <= endCol && startRow <= endRow) {
                for (int i = startRow; i <= endRow; i++) {
                    result.add(matrix[i][endCol]);
                }
                --endCol;
            }
            // 3. 遍历endRow行的各列数据,从右到左,遍历结束,对endRow-1,表示该行数据已经遍历过
            //    因为前一步遍历endCol列后,将要从当前列的最后一行所在行开始遍历
            if (startCol <= endCol && startRow <= endRow) {
                for (int i = endCol; i >= startCol; i--) {
                    result.add(matrix[endRow][i]);
                }
                --endRow;
            }
            // 4. 遍历startCol列的各行数据,从下到上,遍历结束,对startCol+1,表示该列数据已经遍历过
            //    同样,上一次之后,回到了行的最左侧,所以开始向上遍历该行所在的列
            if (startCol <= endCol && startRow <= endRow) {
                for (int i = endRow; i >= startRow; i--) {
                    result.add(matrix[i][startCol]);
                }
                ++startCol;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        // 创建一个数组
        // 1  2  3
        // 8  9  4
        // 7  6  5
        int[][] matrix = {{1,2,3}, {8,9,4}, {7,6,5}};
        List<Integer> result = getMatrix(matrix);
        if (CollectionUtils.isNotEmpty(result)) {
            // 结果应是: 1 2 3 4 5 6 7 8 9
            for(Integer i : result) {
                System.out.print(i + " ");
            }
        }
    }

查看评论

黑马程序员——用二维数组打印螺旋方阵和螺旋矩阵

------- android培训、java培训、期待与您交流! ---------- ————————————————————————————————————————————————————————...
  • zz1017161726
  • zz1017161726
  • 2015-04-26 15:42:34
  • 1975

JAVA 打印 M*N的螺旋矩阵(递归) 效率低得很

import java.io.*;import java.util.*;public class LXM {    int m;    int n;    int jz[][];    int num...
  • zhangxinrun
  • zhangxinrun
  • 2011-03-13 13:07:00
  • 1756

递归和非递归方法打印螺旋矩阵

之前考虑的是方阵,现在是矩阵 #include "stdio.h" #include void SetMatrix1(int **matrix, int x, int y, int k) { ...
  • lskyne
  • lskyne
  • 2013-10-06 20:30:00
  • 2115

螺旋矩阵算法java实现

class TT { public static void main(String[] args) { int m = 5;/*行*/ int n = 6;/*列*/ in...
  • resigshy
  • resigshy
  • 2013-01-28 18:39:35
  • 3172

JAVA实现螺旋矩阵

  • 2011年06月20日 14:40
  • 37KB
  • 下载

java实现数字螺旋矩阵

题目描述:         输入一个100以内的数子num,让这num的平方个数字以螺旋矩阵的方式显示在屏幕上。       例如:输入5,则这25个数恰好可以组成一个正方体,将它以如下方式输出到...
  • qq_31490071
  • qq_31490071
  • 2016-07-09 14:07:12
  • 1802

笔试题里螺旋矩阵的C++简单实现

最近笔试时,被人问道螺旋矩阵的输出问题,当时紧张,想的不是很透彻,回去研究一番,实现如下: 比如N=4的矩阵: 1    2   3    4      ----a排 12 13 14  5 11 1...
  • yanerhao
  • yanerhao
  • 2015-04-09 19:58:31
  • 2458

Python-打印螺旋矩阵

问题描述 输入N, 打印 N*N 螺旋矩阵 比如 N = 3,打印: 1 2 3 8 9 4 7 6 5N = 4,打印: 1 2 3 4 12 13 14 5 11 16 ...
  • qq_26392583
  • qq_26392583
  • 2017-03-11 22:40:12
  • 1564

java编写螺旋矩阵

今天上java课,老师教我们一种非常简单的螺旋矩阵的java编写方法,在这里记载一下: import java.util.Scanner; public class hello1 {  ...
  • apple_01150525
  • apple_01150525
  • 2015-10-31 21:13:49
  • 184

打印螺旋矩阵(递归解法)

求职过程遇到的一道面试题,当时没有做出来,回来想出几种方法,其中大多是“蛮力”解法,不得不陷入一堆的i、j 循环之中。最后想出一种递归解法,现记录如下。 题目如下: 输入N, 打印 N*N...
  • lskyne
  • lskyne
  • 2013-09-26 00:03:22
  • 1060
    个人资料
    持之以恒
    等级:
    访问量: 17万+
    积分: 2137
    排名: 2万+
    最新评论