剑指offer--面试题20:顺时针打印矩阵--Java实现
来源:互联网 发布:爸爸网络词的意思 编辑:程序博客网 时间:2024/05/21 06:47
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:
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
解题思路:
我们可以把矩阵想象成若干个圈,我们可以用一个循环来打印矩阵,每一次打印矩阵中的一个圈。
如下图:
分析循环结束的条件:
第一圈开始的坐标是(0,0)
第二圈开始的坐标是(1,1)
…
…
于是我们选取矩阵中选取左上角(start, start) 的一圈作为分析目标:
对于5×5的矩阵,最后一圈只有一个数字,对应的坐标为(2, 2)
上方输出了2行,那么下方也输出了2行。5 > 2 × 2,对于一个6×6矩阵而言,最后一圈有4个数字 6 > 2 × 2,依然成立。于是我们可以得出,让循环继续的条件是 columns > startX × 2并且
rows > startY × 2。
public static void printMatrixClockwisely(int[][] numbers, int columns, int rows){ if(numbers == null || columns <= 0 || columns <= 0){ return; } int start = 0; while(columns > start * 2 && rows > start * 2){ printMatrixIncCircle(numbers, columns, rows, start); start ++; } }
下面分析怎么打印一圈的数:
打印矩阵最里面一圈可能只需要三步、两步甚至一步
第一步:从左右向右总是需要的
第二步:从上到下,条件:终止行号 > 初始行号
第三步:从右到左,条件:终止行号 > 初始行号 && 终止列号 > 初始列号
第四步:从上到下,条件:终止列号 > 初始列号 && 终止行号 > 开始行号 + 1
public static void printMatrixIncCircle(int[][] numbers, int columns, int rows, int start) { int endX = columns - 1 - start; int endY = rows - 1 - start; for(int i = start; i <= endX; i++){ System.out.println(numbers[start][i]); } if(endY > start){ for(int i = start + 1; i <= endY; i++){ System.out.println(numbers[i][endX]); } } if(endY > start && endX > start){ for(int i = endX - 1; i >= start; i--){ System.out.println(numbers[endY][i]); } } if(endY - start > 1 && endX > start){ for(int i = endY - 1; i >= start + 1; i--){ System.out.println(numbers[i][start]); } } }
0 0
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- 剑指Offer面试题20:顺时针打印矩阵 Java实现
- 剑指Offer:面试题20——顺时针打印矩阵(java实现)
- 《剑指offer》面试题:顺时针打印矩阵
- 剑指offer面试题 顺时针打印矩阵
- 剑指offer面试题20顺时针打印矩阵
- [剑指offer][面试题20]顺时针打印矩阵
- 剑指offer 面试题20:顺时针打印矩阵
- 《剑指offer》面试题20顺时针打印矩阵
- 【剑指offer】面试题20:顺时针打印矩阵
- 剑指offer 面试题20 顺时针打印矩阵
- 剑指Offer:面试题20 顺时针打印矩阵
- 《剑指Offer》面试题20:顺时针打印矩阵
- 剑指offer 面试题20—顺时针打印矩阵
- 《剑指Offer》学习笔记--面试题20:顺时针打印矩阵
- 【剑指Offer学习】【面试题20 : 顺时针打印矩阵】
- 剑指offer面试题20-顺时针打印矩阵
- 剑指offer-面试题20:顺时针打印矩阵
- Redis服务器学习笔记(一)
- 建立视图报 ORA-01031: insufficient privileges
- 搜索引擎的设计与实现(二)技术选型--全文索引
- 线上问题排查命令----Shell篇
- OGRE 阴影详解
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- opencv配置方式
- MySQL数据库的安装与配置(Windows)
- 我喜欢竞争
- Backbone.js 的最佳应用场景有哪些?
- OJ嘻唰唰第二批之成绩统计
- 错误代码: 1381 You are not using binary logging
- 第四章第十九题
- 关于TCP保活功能及其应用