顺时针打印矩阵——剑指offer
矩阵左上角标记为(tR,tC),右下角标标记为(dR,dC)。
先打印最外围一圈的矩阵,之后tR,tC加1,dR和dC减1,再打印子矩阵
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { if(matrix.length == 0){ return null; } ArrayList<Integer> res = new ArrayList<Integer>(); int tR = 0; int tC = 0; int dR = matrix.length - 1; int dC = matrix[0].length - 1; while(tR <= dR && tC <= dC){ PrintClockwise(matrix,tR++,tC++,dR--,dC--,res); } return res; } public static void PrintClockwise(int[][] m,int tR,int tC,int dR,int dC,ArrayList<Integer> res){ // ArrayList<Integer> res = new ArrayList<Integer>(); if(tR == dR) {//一行 for(int i = tC; i <=dC; i++){//后来发现没有通过是因为没加等于号 res.add(m[tR][i]); } } else if(tC == dC){//一列 for(int i = tR; i <= dR; i++){ res.add(m[i][tC]); } } else { int curC = tC; int curR = tR; while(curC != dC){ res.add(m[tR][curC]); curC++; } while(curR != dR){ res.add(m[curR][dC]); curR++; } while(curC != tC){ res.add(m[dR][curC]); curC--; } while(curR != tR){ res.add(m[curR][tC]); curR--; } } return; } }