剑指Offer_19_顺时针打印矩阵
来源:互联网 发布:python time 加减 编辑:程序博客网 时间:2024/05/16 07:52
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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
.
解题思路
每次打印一圈。每次的起始位置满足(start,start),且 start * 2 要小于行数和列数。
每次打印从矩形的上边开始(在存在一圈的情况下),顺时针打印。
首先打印上边,打印完成,判断结束行是否大于start,如果大于,那么打印右边;然后判断结束列是否大于start且结束行是否大于start,如果满足,则打印下边;最后如果存在多列且行数至少有三行,则打印左边。
实现
import java.util.ArrayList;public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> list = new ArrayList<>(); if (matrix == null || matrix.length <= 0 || matrix[0].length <= 0) return list; int start = 0; int rows = matrix.length; int cols = matrix[0].length; while (rows > start * 2 && cols > start * 2){ print(matrix,cols,rows,start,list); start ++; } return list; } private void print(int[][] matrix, int cols, int rows, int start, ArrayList<Integer> list) { int endRows = rows - start - 1; int endCols = cols - start - 1; //打印上边 for (int i = start; i < cols - start; i++){ list.add(matrix[start][i]); } //存在多行,打印右边 if (endRows > start){ int j = endCols; for (int i = start + 1; i < rows - start; i ++){ list.add(matrix[i][j]); } } //存在多行且有多列,打印下边 if (endRows > start && endCols > start){ int rIndex = endRows; for (int i = cols - start - 2; i >= start; i--){ list.add(matrix[rIndex][i]); } } //存在三行以上且有多列,打印下边 if (endRows > start + 1 && endCols > start){ for (int i = rows - start - 2; i > start; i--){ list.add(matrix[i][start]); } } }}
0 0
- 剑指Offer_19_顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- [剑指offer]顺时针打印矩阵
- 《剑指offer》-顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer|顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- java设计模式之单例模式
- Ubuntu安装lighttpdweb服务
- Python Twisted介绍
- centos7+nginx+keepalived互为主从
- cocoapods使用教程
- 剑指Offer_19_顺时针打印矩阵
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- Material Design的学习
- java学习第二节--java 源文件声明规则
- 经验模式分解(EMD)——简介及Matlab工具箱安装
- debian下java的web环境搭建(tomcat+jdk)遇到的版本问题
- 更易用的圆角控件——CardView
- 快速排序
- Cocos2dx 接入友盟社会化分享-微信分享