一、题目
————————————————
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
————————————————
二、思路
————————————————
每次打印矩阵最外面的一圈(用方法printMatrixInCircle()表示),每次都是这个操作,所以可以采用递归。每次打印矩阵的左上角的横纵坐标相同,即为start,而其余三个角的坐标都与行列数以及start有关,因此只需要for循环即可实现打印。
当然,其实只要针对start进行循环判断,start*2的值小于行数和列数时才需要继续打印,这样,通过这个条件,可以用循环来打印每次的最外圈矩阵。
————————————————
三、解决问题
————————————————
测试算例
多行多列,单行多列,多行单列,一个数的矩阵,空矩阵,null
————————————————
package swordoffer;
/**
* @author LQ
* @version 1.0
* @date 2020-04-07 9:28
*/
import java.util.ArrayList;
/**
* 题目描述
* 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
* 例如,如果输入如下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 class Solution22 {
public static void main(String[] args) {
Solution22 demo = new Solution22();
System.out.println("==============================");
demo.test1();
System.out.println("==============================");
}
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> ret = new ArrayList<Integer>();
if((null == matrix) || (0 == matrix.length)){
return null;
}
int row1 = 0, row2 = matrix.length - 1;//行
int col1 = 0, col2 = matrix[0].length - 1;//列
while ((row1 <= row2) && (col1 <= col2)){
//从左到右打印
for (int i = col1; i <= col2; i++) {
ret.add(matrix[row1][i]);
}
//从上往下的每一列打印
for (int i = row1 + 1; i <= row2; i++) {
ret.add(matrix[i][col2]);
}
//判断是否会重复打印(从右往左的每一列数据)
if(row1 != row2){
for (int i = col2 - 1; i >= col1; i--) {
ret.add(matrix[row2][i]);
}
}
//判断是否会重复打印(从下往上的每一行数据)
if(col1 != col2){
for (int i = row2 - 1; i > row1; i--) {
ret.add(matrix[i][col1]);
}
}
row1++;//行索引+1
row2--;//行长度-1
col1++;//列索引+1
col2--;//列长度-1
}
return ret;
}
//=====================测试代码=======================
/*
* 1.功能测试(A、B为普通二叉树;B是或者不是A树的子结构)
* 多行多列,单行多列,多行单列,一个数的矩阵,空矩阵,null
*/
void test1() {
//多行多列
int[][] a0= {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
System.out.println(printMatrix(a0));
//空矩阵
int[][] a1 = {};
System.out.println(printMatrix(a1));
//空矩阵
int[][] a2 = {{}};
System.out.println(printMatrix(a2));
//一个数的矩阵
int[][] a3 = {{1}};
System.out.println(printMatrix(a3));
//单行多列
int[][] a4 = {{1,2,3,4}};
System.out.println(printMatrix(a4));
//多行单列
int[][] a5 = {{1},{2},{3},{4}};
System.out.println(printMatrix(a5));
int[][] a6 = {{1,2,3},{4,5,6}};
System.out.println(printMatrix(a6));
//null
int[][] a7 =null;
System.out.println(printMatrix(a7));
}
}
————————————————
努力也是需要学习的,别再让你的努力,只感动了自己!愿你的每一次努力,都能为自己和别人创造价值。

京公网安备 11010502036488号