
剑指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、在每一排或列完成后进行一次判断,判断是否已经结束
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月30日 19时58分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
css取消双击选中文字
2019-03-04
LeetCode 116填充每个节点的下一个右侧结点指针
2019-03-04
2021-4-28【PTA】【L2-1 包装机 (25 分)】
2019-03-04
2021-5-2【指针】【作业】【指针代替下标进行数组编程】
2019-03-04
Arduino mega2560+MPU6050利用加速度值控制舵机
2019-03-04
pycharm+python+MS SQLSERVER 实战2、实现爬虫程序。
2019-03-04
深入理解数组指针与指针数组的区别
2019-03-04
iOS客户端与PHP服务端的简单交互
2019-03-04
Python的异常处理
2019-03-04
Kubernetes(k8s)的调度器详细介绍
2019-03-04
Linux的网络参数设置
2019-03-04
紫书——蛇形填数
2019-03-04
吐泡泡(栈)
2019-03-04
刷题计划1——poj1753
2019-03-04
第一场
2019-03-04
蓝桥杯备战——刷题(2019)
2019-03-04
ArcMap|栅格计算器报错
2019-03-04
《小石潭记》古文鉴赏
2019-03-04
Matlab中有关字符串数组的常见问题解答
2019-03-04
未定义的变量“py”或函数“py.command”
2019-03-04