顺时针打印矩阵
顺时针打印矩阵
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; } }