顺时针打印矩阵

1、题目描述

输入一个矩阵,按照从外向里以顺时针依次打印出每一个数 字,例如,如果输入如下 4X4 矩阵: 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。

2、问题分析

在这里插入图片描述
收缩矩阵的边界

  • 定义四个变量代表范围,row1、row2、col1、col2;

  • 向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 row1 加一,同时判断是否和代表下边界的 col2 交错;

  • 向下走存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 col2 减一,同时判断是否和代表左边界的 left 交错;

  • 向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 row2 减一,同时判断是否和代表上边界的 up 交错;

  • 向上走存入整列的值,当存入后,该列再也不会被遍历,代表左边界的 left 加一,同时判断是否和代表右边界的 col2 交错。

3、代码

package com.ypj.java;

import java.util.ArrayList;
public class PrintArrayReverse {
    public ArrayList<Integer> printArrayReverse(int[][] array){

        int row1=0;
        int row2=array.length-1;
        int col1=0;
        int col2=array[0].length-1;

        ArrayList<Integer> arraylist = new ArrayList<Integer>();

        if(array == null || array.length == 0 || array[0].length == 0){
            return arraylist;
        }

        while((row1 <= row2) && (col1 <= col2)){
            for(int i=col1;i<= col2;i++){
                arraylist.add(array[row1][i]);
            }
            for(int i=row1+1;i<=row2;i++){
                arraylist.add(array[i][col2]);
            }

            for(int i=col2-1;i>=col1;i--){
                arraylist.add(array[row2][i]);
            }
            for(int i=row2-1;i>row1;i--){
                arraylist.add(array[i][col1]);
            }

            row1 ++;
            row2 --;
            col1 ++;
            col2 --;
        }
        return arraylist;
    }

    public static void main(String[] args) {
        int[][] array = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
//        int[][] array = {{},{}};
        PrintArrayReverse printArrayReverse = new PrintArrayReverse();
        System.out.println(printArrayReverse.printArrayReverse(array));
    }
}

4、运行结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值