目录

  • Zigzag方式打印矩阵
    • 1. 题目
    • 2. 解释
    • 3. 思路
    • 4. 代码
    • 5. 总结

Zigzag方式打印矩阵

1. 题目

用zigzag的方式打印矩阵,比如下面的矩阵:

0 1 2 3
4 5 6 7 
8 9 10 11

打印顺序为:0 1 4 8 5 2 3 6 9 10 7 11

2. 解释

Zigzag打印矩阵是指按照对角线交替方向打印矩阵元素。具体来说:

  1. 从左上角(0,0)开始,向右移动
  2. 当到达第一行末尾时,向下移动
  3. 然后按照左下到右上的方向打印对角线
  4. 接着按照右上到左下的方向打印对角线
  5. 如此交替,直到打印完所有元素

对于示例矩阵,打印顺序如下:

  • 向右:0
  • 向右:1
  • 左下到右上:4→1 (但1已打印),实际是4
  • 右下到左下:8→5→2
  • 右上到左下:3 (已到达右边界,向下)
  • 左下到右上:6→9
  • 右上到左下:10→7
  • 左下到右上:11

3. 思路

我们可以使用两个变量来追踪当前打印的对角线的起点,并交替改变打印方向:

  1. 初始化两个点A和B,都从(0,0)开始
  2. A点先向右移动,到达右边界后向下移动
  3. B点先向下移动,到达下边界后向右移动
  4. 每次A和B确定一条对角线,交替方向打印这条对角线上的元素
  5. 直到A和B都到达矩阵右下角结束

4. 代码

public class ZigzagPrintMatrix {public static void printMatrixZigzag(int[][] matrix) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return;}int aR = 0, aC = 0;  // A点的行和列int bR = 0, bC = 0;   // B点的行和列int endR = matrix.length - 1;int endC = matrix[0].length - 1;boolean fromUp = false; // 打印方向标志,false表示从下往上while (aR != endR + 1) {printDiagonal(matrix, aR, aC, bR, bC, fromUp);// 更新A点:先向右,到达右边界后向下aR = aC == endC ? aR + 1 : aR;aC = aC == endC ? aC : aC + 1;// 更新B点:先向下,到达下边界后向右bC = bR == endR ? bC + 1 : bC;bR = bR == endR ? bR : bR + 1;fromUp = !fromUp; // 切换打印方向}System.out.println();}private static void printDiagonal(int[][] matrix, int aR, int aC, int bR, int bC, boolean fromUp) {if (fromUp) {// 从右上到左下打印while (aR <= bR) {System.out.print(matrix[aR++][aC--] + " ");}} else {// 从左下到右上打印while (bR >= aR) {System.out.print(matrix[bR--][bC++] + " ");}}}public static void main(String[] args) {int[][] matrix = {{0, 1, 2, 3},{4, 5, 6, 7},{8, 9, 10, 11}};printMatrixZigzag(matrix); // 输出: 0 1 4 8 5 2 3 6 9 10 7 11 }
}

5. 总结

Zigzag打印矩阵的关键在于:

  1. 确定两个移动点A和B的移动规律
  2. 交替改变对角线的打印方向
  3. 正确处理边界条件

这种方法的时间复杂度是O(M×N),其中M和N分别是矩阵的行数和列数,因为我们只访问每个元素一次。空间复杂度是O(1),只使用了常数个额外变量。

这种打印方式在实际应用中可能用于特殊的数据展示需求,或者作为某些图像处理算法的预处理步骤。理解这种遍历方式有助于加深对矩阵操作的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87432.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87432.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87432.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端批量下载图片,并打包成压缩包下载】

一、需求说明 我现在有个需求&#xff1a; 1.列表中有个下载按钮&#xff0c;点击下载&#xff0c;将列表中所有的图片打成压缩包&#xff0c;并下载 2.效果演示点击查看效果 最终效果&#xff1a; 二、安装下载插件 实现此功能需要两个插件&#xff1a;jszip、file-saver …

NV133NV137美光固态闪存NV147NV148

NV133NV137美光固态闪存NV147NV148 美光固态闪存技术矩阵深度解析&#xff1a;NV133至NV148的全面较量 一、性能参数&#xff1a;数据高速公路的“车速”比拼 读写速度&#xff1a;从“乡间小道”到“高铁动脉” 美光NV系列固态闪存的核心竞争力在于其读写速度的跃升。以NV15…

从LLM到WM:大语言模型如何进化成具身世界模型?

1.引言这学期在方老师开设的《机器人大模型基础和前沿》选修课上接触并学习了具身智能方面的相关知识。作为交互组的组长&#xff0c;我和组员们在幻尔机器狗的功能开发上有切身的实践与探索&#xff0c;在张江具身智能大会上&#xff0c;也见识到了前沿的技术和行业的发展现状…

第十六届蓝桥杯C++B组国赛题解+复盘总结

文章目录 写在前面1、新型锁2、互质藏卡3、数字轮盘4、斐波那契字符串5、项链排列6、蓝桥星数字7、翻倍8、近似回文字符串9、子串去重10、涂格子 写在前面 打了三年&#xff0c;第十六届是我最后一次参加了&#xff0c;终于如愿以偿国一啦。 这场的大多题目都补了&#xff0c;…

【TTS】2024-2025年主流开源TTS模型的综合对比分析

以下是针对2024-2025年主流开源与商用TTS模型的综合技术选型分析&#xff0c;结合GitHub热度、功能特性、部署成本及中文支持等核心维度进行对比&#xff0c;并附详细实践建议。 一、开源TTS模型对比&#xff08;2024-2025年主流方案&#xff09; 模型名称开源/厂商克隆支持中…

redis延时双删,为什么第一次删除

Redis延时双删策略中第一次删除的作用 在缓存与数据库一致性方案中&#xff0c;"延时双删"&#xff08;Delayed Double-Delete&#xff09;是一种经典策略&#xff0c;其核心流程如下&#xff1a; 第一次删除&#xff1a;更新数据库前&#xff0c;先删除缓存 更新数…

深度学习1(深度学习和机器学习的区别,神经网络)

深度学习和机器学习的区别 深度学习和机器学习都是人工智能&#xff08;AI&#xff09;的重要分支&#xff0c;但它们在方法、应用场景和技术细节上有显著区别。 机器学习通过算法让计算机从数据中学习规律&#xff0c;并做出预测或决策。核心是特征工程&#xff08;人工提取数…

这才叫窗口查询!TDEngine官方文档没讲透的实战玩法

第1章&#xff1a;你不知道的TDEngine窗口查询——开局就不简单 先别急着翻白眼&#xff0c;提到时间窗口查询&#xff0c;可能你脑子里立马浮现的就是那些常规套路&#xff1a;GROUP BY time_interval、FIRST()、LAST()&#xff0c;再加上点AVG()和MAX()&#xff0c;一锅端。…

Day50 预训练模型+CBAM模块

目录 一、resnet结构解析 二、CBAM放置位置的思考 三、针对预训练模型的训练策略 a.差异化学习率 b.三阶段式解冻与微调 (Progressive Unfreezing) 四、尝试对vgg16cbam进行微调策略 是否可以对于预训练模型增加模块来优化其效果&#xff0c;这里会遇到一个问题&#xff…

快速说一下TDD BDD DDD

基本概念 TDD&#xff08;测试驱动开发&#xff09;、BDD&#xff08;行为驱动开发&#xff09;和 DDD&#xff08;领域驱动设计&#xff09;是软件开发领域中几个重要的概念&#xff0c;它们各自有着独特的侧重点与应用场景&#xff0c;以下为你详细介绍&#xff1a; 测试驱…

浅析基于深度学习算法的英文OCR技术工作原理及其应用场景

在数字化信息飞速发展的当下&#xff0c;大量的文本信息以各种形式存在&#xff0c;从传统的纸质文档到电子图片中的文字内容。如何高效地将这些非结构化的文本转化为计算机能够理解和处理的格式&#xff0c;成为了提高信息处理效率的关键。英文 OCR&#xff08;Optical Charac…

AI时代SEO关键词策略

内容概要 在人工智能&#xff08;AI&#xff09;驱动的新时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;关键词策略正迎来颠覆性变革。本篇文章将系统解析AI技术如何重塑关键词研究、内容优化及流量提升的全过程&#xff0c;帮助企业实现高效可持续的在线曝光。通过…

免费一键自动化申请、续期、部署、监控所有 SSL/TLS 证书,ALLinSSL开源免费的 SSL 证书自动化管理平台

目录 一、前言二、ALLinSSL 简介亮点核心功能 三、操作步骤部署安装授权DNS服务商授权你的主机服务器自动化部署ssl测试自动申请ssl证书 一、前言 SSL证书是每个网站必备的&#xff0c;但是现在的免费的ssl证书有效期是3个月&#xff0c;以后CA/B Forum 调整 SSL 证书最长有效期…

如何高效清理C盘、释放存储空间,让电脑不再卡顿。

以下是针对Windows系统的C盘深度清理全攻略&#xff0c;包含系统级优化和进阶操作&#xff0c;可释放30%-70%的冗余空间&#xff1a; 一、系统自带工具快速清理&#xff08;5分钟见效&#xff09; 磁盘清理工具 按WinR → 输入cleanmgr → 选择C盘重点勾选&#xff1a; ✅ Wind…

AI 如何批量提取 Word 表格中的字段数据到 Excel 中?

在日常工作中&#xff0c;我们经常会接触到大量 Word 表格——学生登记表、客户信息表、报名信息表……这些表格数据往往格式不一&#xff0c;但有一个共同的需求&#xff1a; 从中提取出“字段-值”结构&#xff0c;统一导入 Excel&#xff0c;方便后续分析处理。 传统手工操作…

github代码中遇到的问题-解决方案

下面内容介绍的是我个人在复现github代码遇到的一些问题&#xff0c;如果也可以帮到你&#xff0c;请点个关注吧~ 1.我的项目位置在D盘&#xff0c;但是为什么下面终端的位置在E盘 -》cd /d D:\Users\xxxx&#xff08;后面的xxxx是你具体的文档位置&#xff09; 2.怎么知道我…

使用Visual Studio 2022创建CUDA编程项目

要在 Visual Studio 2022 中开发 CUDA 程序,需要进行环境配置并了解基本开发流程。以下是详细步骤: 环境准备 安装 Visual Studio 2022 下载并安装 Visual Studio 2022(社区版或专业版均可)。安装时勾选 “使用 C++ 的桌面开发” 工作负载。确保安装 “C++ CMake 工具” …

Java测试题一

1.基本数据类型有哪些&#xff1f; 基本数据类型有8个&#xff1a;整数&#xff1a;byte、int、long、short。 浮点型&#xff1a;float、double。 布尔型boolean。 字符型&#xff1a;char 2.下列代码的输出是什么&#xff1f;为什么&#xff1f; public static void ma…

使用 Flask 构建基于 Dify 的企业资金投向与客户分类评估系统

使用 Flask 构建基于 Dify 的企业资金投向与客户分类评估系统 前言一、&#x1f9e9; 技术栈二、&#x1f4e6; 项目结构概览三、 &#x1f527; 核心功能模块说明1 配置参数2 请求封装函数✅ 功能说明&#xff1a; 3 Prompt 构造函数4 Flask 路由定义&#x1f3e0; 首页路由 /…

深入解析 AAC AudioSpecificConfig 在 RTSP/RTMP 播放器中的核心作用

在音视频开发中&#xff0c;“能播”往往只是第一步&#xff0c;**“能正确、稳定、高质量地播”**才是衡量一款播放器成熟度的真正标准。尤其是在面对 AAC 音频流时&#xff0c;很多开发者容易忽视一个极其关键但看似微小的配置段 —— AAC Audio Specific Config&#xff08;…