题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如,如果输入如下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.
思路
- 从外到里顺时针打印,相当于每次打印矩阵中的一个圈。打印 圈 的循环结束条件,就是顺时针打印的结束条件。
1.1 结束条件:假设矩阵有rows行,columns列。
打印第一圈左上角起点坐标为(0,0),
打印第二圈左上角气垫坐标为(1,1),
以此类推。得出左上角的坐标为(start,start),并且恒有startY < rows /2 ,startX < columns / 2 ,这就是打印圈的循环结束条件。 - 找到圈的循环结束条件后,到圈的具体打印。
圈分为四步:上行,右列,下行,左列。一个圈子除了上行(只要进入循环,肯定会有上行),其余有可能会缺。
2.1 能打印右列的条件:至少有两行,即终止行号>起始行号
能打印下行的条件:至少两行两列 即终止行号 > 起始行号,终止列号 > 起始列号
能打印左列的条件:至少三行两列 即终止行号 > 起始行 + 1,终止列号 > 起始行号
实现
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
int[][] ints = new int[][]{
{
1},{
2},{
3