顺时针打印矩阵

题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

解题思路

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

分为四步来操作,即从左向右打印,从上往下打印,从右向左打印,从下往上打印,如此循环一圈。
进行一次循环会打印两行两列,因而终止条件为打印的次数*2小于行的数量和列的数量。

最后一圈打印的时候要进行判断,分几种情况 如
情况1:
6 7 8
情况2:
2 3
4 5
6 7
情况3:
8 9
10 11
情况1仅需要从左到右打印,情况二都需要,情况3不需要从下向上,因而需要进行边界判断。


import java.util.ArrayList;

public class shunshizhendayinjuzhen {

    public ArrayList<Integer> printMatrix(int[][] matrix) {

        int rowStart = 0, rowEnd = matrix.length - 1, colStart = 0, colEnd = matrix[0].length - 1;
        ArrayList<Integer> list = new ArrayList<>();

        int count = 0;

        while (count * 2 < rowEnd + 1 && count * 2 < colEnd + 1) {
            // 从左到右

            for (int i = colStart + count; i <= colEnd - count; i++) {
                list.add(matrix[count][i]);
            }
            // 从上到下
            if (count < rowEnd - count)
                for (int i = rowStart + 1 + count; i <= rowEnd - count; i++) {
                    list.add(matrix[i][colEnd - count]);
                }
            // 从右到左
            if (count < rowEnd - count && count < colEnd - count)
                for (int i = colEnd - count - 1; i >= count; i--) {
                    list.add(matrix[rowEnd - count][i]);
                }
            // 从下到上
            if (count < rowEnd - count + 1 && count < colEnd - count)
                for (int i = rowEnd - count - 1; i > count; i--) {
                    list.add(matrix[i][count]);
                }
            count++;
        }

        return list;

    }

    public static void main(String[] args) {

        int[][] array = new int[][] { { 1 } };
        System.out.println(new shunshizhendayinjuzhen().printMatrix(array));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值