博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指 Offer》——19、顺时针打印矩阵
阅读量:2344 次
发布时间:2019-05-10

本文共 1508 字,大约阅读时间需要 5 分钟。

1. 本题知识点

数组

2. 题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

例如:

输入如下 4 X 4 矩阵:1  2  3  45  6  7  89  10 11 1213 14 15 16则依次打印出数字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10

3. 解题思路

  1. 可以把矩阵看成若干个圈,从外向里以顺时针打印,每次打印矩阵中的一圈。
  2. 每一圈从该圈的左上角开始,可以发现起点的行下标和列下标是相等的。
  3. 由于矩阵并不一定是方阵,最后一圈有可能退化为只有一行,只有一列,甚至只有一个数,因此要注意进行判断,避免重复打印。

4. 代码

import java.util.ArrayList;public class Solution {
public ArrayList
printMatrix(int[][] matrix) {
// list 记录打印顺序 ArrayList
list = new ArrayList<>(); int row = matrix.length; // 总行数 int col = matrix[0].length; // 总列数 // 循环打印每一圈,count 记录圈数 for (int count = 0; 2 * count < row && 2 * count < col; count++) {
// 本圈行数 int endX = row - 1 - count; // 本圈列数 int endY = col - 1 - count; // 从左到右 for (int i = count; i <= endY; i++) {
list.add(matrix[count][i]); } // 从上到下 for (int i = count + 1; i <= endX; i++) {
list.add(matrix[i][endY]); } // 从右到左,如果只有一行,要避免重复打印 if (endX > count) {
for (int i = endY - 1; i >= count; i--) {
list.add(matrix[endX][i]); } } // 从下到上,如果只有一列,要避免重复打印 if (endY > count) {
for (int i = endX - 1; i > count; i--) {
list.add(matrix[i][count]); } } } return list; }}

转载地址:http://jyjvb.baihongyu.com/

你可能感兴趣的文章
将代码托管到GitHub
查看>>
Java实现PDF的生成(使用IText)
查看>>
MySQL学习笔记
查看>>
数据库连接池
查看>>
MySQL性能优化经验
查看>>
MySQL学习参考
查看>>
Java工程结构管理(BuildPath/系统库/外部库)
查看>>
将代码托管到Coding
查看>>
Myeclipse/Eclipse在pull时发生冲突报错Checkout conflict with files
查看>>
JS-异步提交表单的几种方式
查看>>
Http请求中的Context-Type及其SpringMVC中的使用
查看>>
SpringMVC实现上传下载文件
查看>>
AJAX异步提交表单(表单数据有文件流、字符串)
查看>>
MyBatis中遇到的一些问题
查看>>
在JSP使用EL和JSTL判断指定元素是否存在于指定集合中
查看>>
JDBC学习笔记
查看>>
Activiti配置Oracle不能自动创建表/流程启动是表或试图不存在的问题
查看>>
Oracle学习笔记
查看>>
JQuery EasyUI学习总结
查看>>
AJAX学习笔记
查看>>