題目描述
輸入一個(gè)矩陣豆拨,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字浦旱,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數(shù)字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
一開始以為是n*n的矩陣九杂,寫出了如下代碼:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list = new ArrayList<>();
int row = matrix.length;
int col = matrix[0].length;
int rowCount = 0;
int colCount = col-1;
int revRowCount = row-1;
int revColCount = 0;
while(rowCount<=revRowCount&&colCount>=revColCount){
//打印頂部一行
for(int i=revColCount; i<=colCount; i++){
list.add(matrix[rowCount][i]);
}
rowCount++;
//打印右側(cè)一列
for(int i=rowCount; i<=revRowCount; i++){
list.add(matrix[i][colCount]);
}
colCount--;
//打印底部一行
for(int i=colCount; i>=revColCount; i--){
list.add(matrix[revRowCount][i]);
}
revRowCount--;
//打印左側(cè)一列
for(int i=revRowCount; i>=rowCount; i--){
list.add(matrix[i][revColCount]);
}
revColCount++;
}
return list;
}
}
在測試n*1矩陣的時(shí)候沒有通過颁湖,因?yàn)樵谝淮窝h(huán)時(shí)至少打印兩行、兩列例隆。如下代碼加了對(duì)矩陣只有一行或只有一列的判斷甥捺。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list = new ArrayList<>();
int row = matrix.length;
int col = matrix[0].length;
int rowCount = 0;
int colCount = col-1;
int revRowCount = row-1;
int revColCount = 0;
while(rowCount<=revRowCount&&colCount>=revColCount){
//打印頂部一行
for(int i=revColCount; i<=colCount; i++){
list.add(matrix[rowCount][i]);
}
rowCount++;
//打印右側(cè)一列
for(int i=rowCount; i<=revRowCount; i++){
list.add(matrix[i][colCount]);
}
colCount--;
//打印底部一行,先排除只有一行的情況
if(rowCount>revRowCount){
break;
}
for(int i=colCount; i>=revColCount; i--){
list.add(matrix[revRowCount][i]);
}
revRowCount--;
//打印左側(cè)一列镀层,先排除只有一列的情況
if(colCount<0){
break;
}
for(int i=revRowCount; i>=rowCount; i--){
list.add(matrix[i][revColCount]);
}
revColCount++;
}
return list;
}
}