您的位置:首页 > Web前端

剑指Offer—19—顺时针打印矩阵

2017-08-22 15:11 369 查看
顺时针打印矩阵 : 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

思路:

循环:此题主要考察循环终止的条件。从矩阵左上角开始,顺时针遍历即可

注意点:

循环终止的条件

当遍历到最后一个圈的时候,会有三种情况,一是只有一行,二是只有一列,三是只有一个数,上面三种情况都要另外考虑

package A19顺时针打印矩阵;

import java.util.ArrayList;

public class Solution1 {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> list = new ArrayList<>();
int top = 0;
int bottom = matrix.length - 1;
int left = 0;
int right = matrix[0].length - 1;
while(left<right && top<bottom){
// 左 右
for(int i = left;i<= right;i++){
list.add(matrix[top][i]);
}
// 上 下
for (int i = top+1; i <= bottom; i++) {
list.add(matrix[i][right]);
}
// 右 左
for(int i = right-1;i>=left;i--){
list.add(matrix[bottom][i]);
}
// 下 上
for (int i = bottom-1; i > top; i--) {
list.add(matrix[i][left]);
}
left++;
right--;
top++;
bottom--;
}
// 一行
if (top == bottom && left < right) {
for (int i = left; i <=right; i++) {
list.add(matrix[top][i]);
}
}
// 一列
if (left == right && top < bottom) {
for(int i=top;i<= bottom;i++){
list.add(matrix[i][left]);
}
}
// 一个数
if (left == right && top == bottom) {
list.add(matrix[left][top]);
}
return list;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  矩阵 循环