题解 | #顺时针打印矩阵#
顺时针打印矩阵
http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> retList = new ArrayList<>() ; if(matrix == null || matrix.length==0 || matrix[0].length==0) { return retList ; } //定义边界 int up = 0 ; int down = matrix.length-1 ; int left = 0 ; int right = matrix[0].length-1 ; //定义坐标(i,j) int i = 0 ; int j = 0 ; while(isOk(up , down , left , right , i , j)) { //向右运动 while(j <= right) { retList.add(matrix[i][j]); j ++ ; } j--; i++; up++ ; //向下运动 if(!isOk(up , down , left , right , i , j)) { break ; } while(i <= down) { retList.add(matrix[i][j]); i ++ ; } i-- ; j--; right--; //向左运动 if(!isOk(up , down , left , right , i , j)) { break ; } while(j >= left) { retList.add(matrix[i][j]); j-- ; } j++ ; i--; down-- ; //向上运动 if(!isOk(up , down , left , right , i , j)) { break ; } while(i >= up) { retList.add(matrix[i][j]); i-- ; } i++ ; j++ ; left++; } return retList ; } //判断是否超出边界 public boolean isOk(int up , int down , int left , int right , int i , int j) { if(i >= up && i <= down && j >= left && j <= right) { return true ; } return false ; } }
一个菜鸟的算法刷题记录 文章被收录于专栏
分享一个菜鸟的成长记录