package com.dixin.temp;
import org.junit.Test;
import java.util.ArrayList;
/**
* Created by admin on 2017/10/26.
* 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
* 例如,如果输入如下矩阵: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 K {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list=new ArrayList<>();
int startRow=0;
int startCol=0;
int endRow=matrix.length-1;
int endCol=matrix[0].length-1;
while(startRow<=endRow&&startCol<=endCol) {
if(startCol==endCol) {//子矩阵只有一列时
for(int i=startRow;i<=endRow;i++) {
list.add(matrix[i][startCol]);
}
} else if(startRow==endRow){//子矩阵只有一行时
for(int i=startCol;i<=endCol;i++) {
list.add(matrix[startRow][i]);
}
} else {
//定义两个用于变化的量
int tmpRow=startRow;
int tmpCol=startCol;
//开始转圈打印
while(tmpCol<endCol) {
list.add(matrix[startRow][tmpCol]);//1 2 3
tmpCol++;
}//出来时tmpCol=endCol 题意为3
while(tmpRow<endRow) {
list.add(matrix[tmpRow][endCol]);//4 8 12
tmpRow++;
}//出来时tmpRow=endRow 题意为3
while(tmpCol>startCol) {
list.add(matrix[endRow][tmpCol]);//16 15 14
tmpCol--;
}//出来时tmpCol=startCol 题意为0
while(tmpRow>startRow) {
list.add(matrix[tmpRow][startCol]);//13 9 5
tmpRow--;
}//出来时tmpRow=startRow 题意为0
}
startCol++;//对角线向内找,直到找到最中间的点
startRow++;
endCol--;
endRow--;
}
return list;
}
@Test
public void test() {
int a[][]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
ArrayList<Integer> list=printMatrix(a);
for(int b:list) {
System.out.print(b+" ");
}
}
}
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
最新推荐文章于 2024-06-13 13:30:40 发布