顺时针打印矩阵
顺时针打印矩阵
http://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a
Java 解题
定义几个int变量,存储最小行、最大行、最小列、最大列行号、已存入List中的整数的个数(感觉会节约时间,比每次计算List的size);
完成一行的循环,行号进行一次变化(最上方的行循环,对应最小行号加1;最下方的行循环,最大行号减去1);
列循环同理。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
// 行列交替变化
ArrayList<Integer> resultList = new ArrayList<Integer>();
int minHang = 0;
int maxHang = matrix.length;
int minLie = 0;
int maxLie = matrix[0].length;
int totalNum = (maxHang)*(maxLie);
int existNum = 0;
if(maxHang==0 && maxLie==0){
return resultList;
}
int j=0;
int i=0;
while(existNum<totalNum){
// 最上边一行,向右
for(j=minLie; j<maxLie; j++){
resultList.add(matrix[minHang][j]);
existNum++;
}
minHang++;
if(existNum==totalNum) {break;}
// 最右边一列,向下
for(i=minHang; i<maxHang; i++){
resultList.add(matrix[i][maxLie-1]);
existNum++;
}
maxLie--;
if(existNum==totalNum) {break;}
// 最下边一行向左
for(j=maxLie-1; j>=minLie; j--){
resultList.add(matrix[maxHang-1][j]);
existNum++;
}
maxHang--;
if(existNum==totalNum) {break;}
// 最左边一列,向上
for(i=maxHang-1; i>=minHang; i--){
resultList.add(matrix[i][minLie]);
existNum++;
}
minLie++;
}
return resultList;
}
}