当前位置: 首页 > backend >正文

c++面试题(14)------顺时针打印矩阵

  • 操作系统:ubuntu22.04
  • IDE:Visual Studio Code
  • 编程语言:C++11

题目描述

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

例如:

输入矩阵:
[[ 1,  2,  3 ],[ 4,  5,  6 ],[ 7,  8,  9 ]
]输出:[1,2,3,6,9,8,7,4,5]

解法思路:模拟边界遍历(按圈打印)

这是一个非常经典的二维数组模拟题。
🧠 思路总结:

我们可以把矩阵想象成一圈一圈的“洋葱”,从最外层开始,顺时针打印每一圈的四条边:

  • 从左到右 打印上边;
  • 从上到下 打印右边;
  • 从右到左 打印下边;
  • 从下到上 打印左边;

每打印完一层就缩小一圈范围,直到所有元素都被访问。

实现代码

#include <vector>
using namespace std;class Solution {
public:vector< int > spiralOrder( vector< vector< int > >& matrix ){vector< int > result;if ( matrix.empty() )return result;int rows = matrix.size();int cols = matrix[ 0 ].size();// 定义当前圈的四个边界int top = 0, bottom = rows - 1;int left = 0, right = cols - 1;while ( top <= bottom && left <= right ){// 1. 从左到右for ( int i = left; i <= right; ++i ){result.push_back( matrix[ top ][ i ] );}top++;  // 上边界下移// 2. 从上到下for ( int i = top; i <= bottom; ++i ){result.push_back( matrix[ i ][ right ] );}right--;  // 右边界左移// 注意:可能只剩一行或一列的情况,需要判断是否还存在下边和左边if ( top <= bottom ){// 3. 从右到左for ( int i = right; i >= left; --i ){result.push_back( matrix[ bottom ]`在这里插入代码片`[ i ] );}bottom--;  // 下边界上移}if ( left <= right ){// 4. 从下到上for ( int i = bottom; i >= top; --i ){result.push_back( matrix[ i ][ left ] );}left++;  // 左边界右移}}return result;}
};#include <iostream>int main()
{vector< vector< int > > matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };Solution sol;vector< int > result = sol.spiralOrder( matrix );cout << "顺时针打印结果:" << endl;for ( int num : result ){cout << num << " ";}return 0;
}

运行结果

顺时针打印结果:
1 2 3 6 9 8 7 4 5 
http://www.xdnf.cn/news/14544.html

相关文章:

  • VSCode -配置为中文界面
  • Javaweb学习day4——(MVC架构模式)
  • 项目文章 ▏组蛋白乳酸化驱动的B7-H3表达促进肿瘤免疫逃避
  • HashMap相关学习
  • 嵌入式学习笔记C语言阶段--16函数指针
  • UI前端大数据可视化:从设计到实现的完整流程
  • SQL基础语法+运行原理+云端数据库搭建
  • Qwen2.5-VL 是什么?
  • 大模型笔记4:RAG检索增强生成
  • LangGraph--框架核心思想
  • 数字系统设计与verilog hdl第8版王金明
  • HPC软件架构---Vector solution方案简介
  • 订单状态定时处理-01.需求分析
  • 免费插件集-illustrator插件-Ai插件-移除非纯黑叠印
  • NodeJS怎么开启多核执行任务,加快执行速度
  • 基于51单片机的流量检测及时间显示系统
  • PaddleOCR项目实战(2):SpringBoot服务开发之接口设计
  • 基于CL_PSO与BP神经网络分类模型的特征选择方法研究(Python实现)
  • 基于CATIA轴系的最小边界曲面自动化生成技术深度解析
  • linux多线程之POSIX信号量
  • PHP Swoft2 框架精华系列:Config 配置解析,使用说明
  • 如何在 Elementary OS 上安装 Google Chrome 浏览器
  • 智慧流水线在ESOP数字工厂中的作用
  • 迈向通用具身智能:具身智能的综述与发展路线
  • 前端如何调用外部api获取省市区数据
  • leetcode138-随机链表的复制
  • 技术突破与落地应用:端到端 2.0 时代辅助驾驶TOP10 论文深度拆解系列【第四篇(排名不分先后)】
  • 【C++】模板入门
  • LeetCode HOT 100
  • C语言空指针异常在Java中的解决方案