剑指offer---顺时针打印矩阵

点点圈 提交于 2020-03-03 19:04:20

题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下4X4矩阵:12345678910111213141516则依次 打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路:按层模拟:终止行号大于起始行号,终止列号大于起始列号。

package Function;
import java.util.ArrayList;
import java.util.List;
public class spiralOrder29 {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        if (matrix == null || matrix.length == 0) {
            return res;
        }
        //行
        int r1 = 0, r2 = matrix.length - 1;
        //列
        int c1 = 0, c2 = matrix[0].length - 1;
        while (r1 <= r2 && c1 <= c2) {
            // 从 左 往 右
            for (int c = c1; c <= c2; c++) {
                res.add(matrix[r1][c]);
            }
                // 从 上 往 下
            for (int r = r1 + 1; r <= r2; r++) {
                res.add(matrix[r][c2]);
            }
            // 判 断 是 否 会 重 复 打 印
            if (r1 < r2 && c1 < c2) {
                // 从 右 往 左
                for (int c = c2 - 1; c > c1; c--) {
                    res.add(matrix[r2][c]);
                }
                // 从 下 往 上
                for (int r = r2; r > r1; r--) {
                    res.add(matrix[r][c1]);
                }
            }
            r1++;
            r2--;
            c1++;
            c2--;
        }
        return res;
    }
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!