题解 | #顺时针打印矩阵#
顺时针打印矩阵
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 ;
}
}
一个菜鸟的算法刷题记录 文章被收录于专栏
分享一个菜鸟的成长记录

查看14道真题和解析