import java.util.ArrayList;
public class Solution {
public void print(int [][] matrix,int rows,int cols,int k, ArrayList<Integer> arr) {
int endX = cols-1-k;
int endY = rows-1-k;
for(int j=k;j<=endX;j++)
arr.add(matrix[k][j]);
for(int j=k+1;j<=endY;j++)
arr.add(matrix[j][endX]);
if(k < endX && k < endY){//eg:一行或者一列
for(int j=endX-1;j>=k;j--)
arr.add(matrix[endY][j]);
}
if(k < endX && k < endY-1){
for(int j=endY-1;j>k;j--)
arr.add(matrix[j][k]);
}
}
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> arr = new ArrayList();
int rows = matrix.length;
int cols = matrix[0].length;
if(rows == 1 && cols == 1){
arr.add(matrix[0][0]);
return arr;
}
int i = 0,j = 0;
int k = 0;
while(k * 2 < (Math.min(rows,cols))){
print(matrix,rows,cols,k,arr);
k++;
}
return arr;
}
}
能用乘法的用乘法,尽量不用除法!
print()函数中有两个难点:
(1)上下左右的交界点,容易被重复打印;
(2)终止行号和列号与k的关系
等以后再回复一遍吧
参考:
https://blog.csdn.net/qq_33724710/article/details/51392553
https://blog.csdn.net/lilianforever/article/details/51848885