剑指offer JZ19 顺时针打印数组
发布日期:2021-05-07 13:14:31 浏览次数:18 分类:原创文章

本文共 1562 字,大约阅读时间需要 5 分钟。

顺时针打印数组

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

public ArrayList<Integer> printMatrix(int [][] matrix) {           ArrayList<Integer> list = new ArrayList<Integer>();        //用两个变量存放边界,利用i,j变量数组元素,并切换控制i,j        int min_row = 0;        int max_row = matrix.length;        int min_col = 0;        int max_col = matrix[0].length;        int count = 0;        int i=0,j=0;        int total = max_row*max_col;        while(count<total){               //在循环中如何遍历?            //一圈一圈进行遍历            //如果是外圈(5*5矩阵)            //上横排 初始点(0,0),结束点(0,4)            for(i=min_row,j = min_col;j<max_col;j++){                   list.add(matrix[i][j]);                count++;            }            //右竖排 初始点(1,4),结束点(4,4)            if(count>=total) break;            for(i = min_row+1,j = max_col-1;i<max_row;i++){                   list.add(matrix[i][j]);                count++;            }            if(count>=total) break;            //下横排 初始点(4,3),结束点(4,0)            for( i = max_row - 1, j = max_col-2;j>=min_col;j--){                   list.add(matrix[i][j]);                count++;            }            //左竖排 初始点(3,0),结束点(1,0)            if(count>=total) break;            for( i = max_row - 2, j = min_col;i>min_row;i--){                   list.add(matrix[i][j]);                count++;            }            min_row++;min_col++;            max_row--;max_col--;        }        return list;    }

突破点
1、由外而内,一圈一圈地添加至list中,一圈完成后缩小边界
2、在每一排或列完成后进行一次判断,判断是否已经结束

上一篇:剑指offer JZ21 栈的压入弹出序列
下一篇:剑指offer JZ18二叉树的镜像

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年03月30日 19时58分42秒