顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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:用4个变量控制打印的边界,顺时针打印即可
代码如下:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
int row = matrix.length-1;
int col = matrix[0].length-1;
int brow = 0;
int bcol = 0;
ArrayList<Integer> list = new ArrayList<>();
while(brow <= row && bcol <= col){
for(int y = bcol; y <= col;y++) {
list.add(matrix[brow][y]);
}
brow++;
for(int x = brow;x<=row;x++ ) {
list.add(matrix[x][col]);
}
col--;
if(brow <= row) {//列多于行时,避免重复输出
for(int y = col;y>=bcol;y--) {
list.add(matrix[row][y]);
}
row--;
}
if(bcol <= col) {//行多于列时,避免重复输出
for(int x = row;x>=brow;x--){
list.add(matrix[x][bcol]);
}
bcol++;
}
}
return list;
}
}
后俩个if语句很重要
**思路2:**可以模拟魔方逆时针转动的方法,一直做取出第一行操作
例如:
1 2 3
4 5 6
7 8 9
输出并删除第一行后,逆时针旋转一次,就变成:
6 9
5 8
4 7
代码如下:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list = new ArrayList<>();
int row = matrix.length;
while(row != 0){
for(int i = 0;i < matrix[0].length;i++){
list.add(matrix[0][i]);
}
if(row == 1)
break;
matrix = turn(matrix);
row = matrix.length;
}
return list;
}
public int[][] turn(int[][] matrix){
int row = matrix.length;
int col = matrix[0].length;
int[][] other = new int[col][row-1];
for(int j = col - 1;j >= 0; j--){
for(int i = 1;i < row;i++){//第一行已经被输出了
other[col - 1 - j][i-1] = matrix[i][j];
}
}
return other;
}
}
来源:CSDN
作者:machine_Heaven
链接:https://blog.csdn.net/machine_Heaven/article/details/103746117