【剑指Offer】29.顺时针打印矩阵

news/2025/2/21 7:26:08/

题目

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:

[[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]

数据范围:

0 <= matrix.length <= 100

0 <= matrix[i].length <= 100

示例1

输入:[[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]

示例2

输入:[[1,2,3,1],[4,5,6,1],[4,5,6,1]]

返回值:[1,2,3,1,1,1,6,5,4,4,5,6]

解答

源代码

import java.util.*;
import java.util.ArrayList;
public class Solution {public ArrayList<Integer> printMatrix(int [][] matrix) {if (matrix == null) {return null;}ArrayList<Integer> res = new ArrayList<>();int left = 0, right = matrix[0].length - 1;int up = 0, down = matrix.length - 1;while (left <= right && up <= down) {for (int i = left; i <= right; i++) {res.add(matrix[up][i]);}up++;if (up > down) {break;}for (int i = up; i <= down; i++) {res.add(matrix[i][right]);}right--;if (left > right) {break;}for (int i = right; i >= left; i--) {res.add(matrix[down][i]);}down--;if (up > down) {break;}for (int i = down; i >= up; i--) {res.add(matrix[i][left]);}left++;if (left > right) {break;}}return res;}
}

总结

设置好边界,每遍历完一列或一行都要对边界进行调整,并且调整后需要进行判断看边界是否相交了。


http://www.ppmy.cn/news/1158990.html

相关文章

4.Vue-Vue调用第三方接口

题记 用vue调用第三方接口&#xff0c;以下是全部代码和操作流程。 寻找第三方接口网站 推荐&#xff1a;免费API - 提供免费接口调用平台 (aa1.cn) 下面的代码以下图中的接口为例 安装axios模块 在终端输入以下命令&#xff1a; npm install axios 调用第三方接口代码 调…

OpenCV4 :并行计算cv::parallel_for_

OpenCV4 &#xff1a;并行计算cv::parallel_for_ 在计算机视觉和图像处理领域&#xff0c;OpenCV&#xff08;开源计算机视觉库&#xff09;是一个非常强大和广泛使用的库。随着图像分辨率的提高和计算任务的复杂度增加&#xff0c;实时处理变得越来越困难。为了解决这个问题&…

ChatGPT教你5分钟解锁国际象棋技能

国际象棋是一种很好玩的棋类游戏&#xff0c;走法和规则与中国象棋有所区别。如果想要快速入门&#xff0c;可以把ChatGPT当做私人教练&#xff0c;提出这些问题&#xff1a; ●作为零基础的初学者&#xff0c;学习国际象棋的最佳方法是什么&#xff1f;如何快速入门&#xff…

flutter开发实战-下拉刷新与上拉加载更多实现

flutter开发实战-下拉刷新与上拉加载更多实现 在开发中经常遇到列表需要下拉刷新与上拉加载更多&#xff0c;这里使用EasyRefresh&#xff0c;版本是3.3.21 一、什么是EasyRefresh EasyRefresh可以在Flutter应用程序上轻松实现下拉刷新和上拉加载。它几乎支持所有Flutter Sc…

计网面试复习自用

五层&#xff1a; 应用层&#xff1a;应用层是最高层&#xff0c;负责为用户提供网络服务和应用程序。在应用层&#xff0c;用户应用程序与网络进行交互&#xff0c;发送和接收数据。典型的应用层协议包括HTTP&#xff08;用于网页浏览&#xff09;、SMTP&#xff08;用于电子邮…

游戏缺少dll文件用什么修复?dll多种修复方法指南

在玩游戏时&#xff0c;有时候可能会遇到游戏缺少dll文件的问题。dll文件是动态链接库的缩写&#xff0c;它包含了一些函数和资源&#xff0c;游戏运行需要依赖这些文件。如果缺少了某个dll文件&#xff0c;游戏就可能无法正常运行。那么游戏缺少dll文件用什么修复&#xff1f;…

关于React

当今的Web开发世界中&#xff0c;React已经成为前端开发的主要工具之一。它的强大和灵活性使开发人员能够构建复杂的用户界面&#xff0c;同时保持代码的可维护性。本篇博客文章将深入探讨React&#xff0c;包括其核心概念、组件化开发、状态管理、性能优化和生态系统。 1. Re…

C++产生未定义的行为的原因分析

前言 最近一直在做QT开发&#xff0c;编程环境是VS2017和QT5.11.2 经常遇到的问题就是&#xff0c;在VS中调试程序&#xff0c;前面都是正常运行的&#xff0c;但是当关闭窗口&#xff0c;退出程序的时候&#xff0c;VS会抛出一个异常 “未加载ntdll.pdb&#xff0c;触发了一…