剑指offer 4.2 画图形象化问题2- 顺时针打印矩阵
2014-08-11 09:50
204 查看
面试题20:顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵
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
由于是以从外圈到内圈的顺序依次打印,可以在矩阵中标注一圈作为分析目标。设矩阵的宽度为columns,高度为rows。选取左上角坐标为(startX, startY),右下角坐标为(endX, endY)的一个圈来分析。
由于endX和endY可以根据startX、startY以及columns、rows来求得,因此只需要引入startX和startY两个变量。而打印第一圈时,左上角的坐标是(0,0),打印第二圈时左上角的坐标是(1,1)。所以,其实左上角的坐标中startX和startY是相等的,表示为(start,start)就可以了。
现在可以想象有一个循环,在每一次循环里,从(start,
start)出发按顺时针打印一圈数字。然后start加1,继续打印下一圈。
分析这个循环结束的条件:
对于一个5 x 5的矩阵而言,最后一圈只有1个数字,对应的坐标是(2,2),5 > 2 * 2。
对于一个6 x 6的矩阵而言,最有一个圈有4个数字,左上角坐标是(2,2),6 > 2 * 2。
可以得出,让循环继续的条件是columns > start * 2 && rows > start * 2
接下来讨论如何顺时针打印一圈数字,即printMatrixInCircle()的实现。
可以分4个步骤来打印:
1) 从左到右打印一行(黄色区域):
这一步一定需要。如果只有一行,就不用进行第二步。
2)从伤到下打印一列(绿色区域);
需要第二步的前提是终止行号大于起始行号。
3)从右到左打印一行(蓝色区域);
需要第三步的前提是圈内至少有两行两列,即除去终止行号大于起始行号以外,还需要终止列号要大于起始列号。
4)从下到上打印一列(紫色区域);
需要第四步的前提是至少有三行两列,也就是终止行号比起始行号至少大2,同时终止列号大于起始列号。
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵
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
由于是以从外圈到内圈的顺序依次打印,可以在矩阵中标注一圈作为分析目标。设矩阵的宽度为columns,高度为rows。选取左上角坐标为(startX, startY),右下角坐标为(endX, endY)的一个圈来分析。
由于endX和endY可以根据startX、startY以及columns、rows来求得,因此只需要引入startX和startY两个变量。而打印第一圈时,左上角的坐标是(0,0),打印第二圈时左上角的坐标是(1,1)。所以,其实左上角的坐标中startX和startY是相等的,表示为(start,start)就可以了。
现在可以想象有一个循环,在每一次循环里,从(start,
start)出发按顺时针打印一圈数字。然后start加1,继续打印下一圈。
分析这个循环结束的条件:
对于一个5 x 5的矩阵而言,最后一圈只有1个数字,对应的坐标是(2,2),5 > 2 * 2。
对于一个6 x 6的矩阵而言,最有一个圈有4个数字,左上角坐标是(2,2),6 > 2 * 2。
可以得出,让循环继续的条件是columns > start * 2 && rows > start * 2
接下来讨论如何顺时针打印一圈数字,即printMatrixInCircle()的实现。
可以分4个步骤来打印:
1) 从左到右打印一行(黄色区域):
这一步一定需要。如果只有一行,就不用进行第二步。
2)从伤到下打印一列(绿色区域);
需要第二步的前提是终止行号大于起始行号。
3)从右到左打印一行(蓝色区域);
需要第三步的前提是圈内至少有两行两列,即除去终止行号大于起始行号以外,还需要终止列号要大于起始列号。
4)从下到上打印一列(紫色区域);
需要第四步的前提是至少有三行两列,也就是终止行号比起始行号至少大2,同时终止列号大于起始列号。
相关文章推荐
- 【剑指offer】4.2画图让抽象问题形象化——面试题20:顺时针打印矩阵
- 剑指offer-4-面试题20:顺时针打印矩阵(画图使抽象问题形象化)
- 画图让抽象问题形象化:顺时针打印矩阵
- 【剑指offer】4.2画图让抽象问题形象化——面试题19:二叉树的镜像
- (C++)剑指offer-19:顺时针打印矩形(画图让抽象形象化)
- 【剑指offer】顺时针打印矩阵
- 【剑指Offer面试题】 九度OJ1391:顺时针打印矩阵
- 剑指offer 4.3 举例形象化问题3 - 从上到下打印二叉树
- 剑指offer 顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- 剑指offer-面试题20.顺时针打印矩阵
- 剑指offer 面试题20—顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer 算法 (画图让抽象问题形象化)
- 【剑指offer】题目20 顺时针打印矩阵
- 【剑指offer】之顺时针打印矩阵
- *【九度OJ1362】|【剑指offer20】顺时针打印矩阵
- 剑指Offer:面试题20 顺时针打印矩阵
- 【剑指Offer面试编程题】题目1391:顺时针打印矩阵--九度OJ