剑指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; } }
相关文章推荐
- 【剑指offer】19顺时针打印矩阵
- 剑指Offer_19_顺时针打印矩阵
- 牛客网-剑指offer-19-顺时针打印矩阵
- 剑指offer——19.顺时针打印矩阵
- 剑指Offer——(19)顺时针打印矩阵
- 剑指Offer--19.顺时针打印矩阵
- 剑指offer_19_顺时针打印矩阵
- 剑指offer 19 顺时针打印矩阵
- [剑指Offer] 19.顺时针打印矩阵
- 剑指offer面试题29:顺时针打印矩阵
- 剑指offer-面试题 20:顺时针打印矩阵
- 剑指Offer----面试题20:顺时针打印矩阵
- 剑指offer_数组---顺时针打印矩阵
- 剑指offer面试题20 顺时针打印矩阵
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- 《苦练算法》-剑指Offer- 二十、顺时针打印矩阵 -python编写
- 剑指offer——面试题20:顺时针打印矩阵
- [剑指offer][面试题20]顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer_面试题20_顺时针打印矩阵(思路在一步步分解之中)