【题目】
给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,例如:
1 2 3 4
5 6 7 8
9 10 11 12
“之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12
【要求】
额外空间复杂度为O(1)。
package client; import java.util.*; public class Printer { private static int index = 0; public static void main(String[] args) { int[][] mat = {{85,40,61,54,9},{59,9,74,25,91},{68,97,33,91,91},{26,67,37,33,80},{24,8,19,32,65},{28,9,41,2,0},{4,41,48,99,9},{43,50,55,6,2},{95,30,8,62,1}}; int[] printMatrix = printMatrix(mat, 9, 5); System.out.println(Arrays.toString(printMatrix)); } public static int[] printMatrix(int[][] mat, int n, int m) { int[] res = new int[mat.length*mat[0].length]; int tR = 0; int tC = 0; int dR = 0; int dC = 0; int endR = mat.length - 1; int endC = mat[0].length - 1; boolean fromUp = false; while (tR != endR+1) { printLevel(mat, tR, tC, dR, dC, fromUp, res); tR = tC == endC ? tR + 1 : tR; tC = tC == endC ? tC : tC + 1; dC = dR == endR ? dC + 1 : dC; dR = dR == endR ? dR : dR + 1; fromUp = !fromUp; } return res;//[85, 40, 59, 68, 9, 61, 54, 74, 97, 26, 24, 67, 33, 25, 9, 91, 91, 37, 8, 28, 4, 9, 19, 33, 91, 80, 32, 41, 41, 43, 95, 50, 48, 2, 65, 0, 99, 55, 30, 8, 6, 9, 2, 62, 1] } private static void printLevel(int[][] mat, int tR, int tC, int dR, int dC, boolean fromUp, int[] res) { /*if (fromUp) { while (tR != dR + 1) { res[index++] = mat[tR++][tC--]; } } else { while (dR != tR - 1) { res[index++] = mat[dR--][dC++]; } }*/ if (fromUp) { while (dC-1 != tC) { res[index++] = mat[tR++][tC--]; } } else { while (dC != tC+1) { res[index++] = mat[dR--][dC++]; } } } }
相关推荐
3. **Z字形遍历**:在某些应用场景中,如打印矩阵或显示图像,我们可能希望按照Z字形路径遍历矩阵,即从左上角开始,向右到底部,然后向上到右边界,如此反复,形成类似Z的轨迹。 4. **自定义遍历**:根据具体需求...
在分析和处理矩阵数据时,递归遍历只是众多方法之一。根据具体应用场景,还可以结合其他算法,如深度优先搜索(DFS)或广度优先搜索(BFS),以及不同的遍历顺序,如螺旋遍历、Z字形遍历等。 总结来说,"递归遍历...
蛇形矩阵,又称Z字形矩阵,是一种特殊的二维数组排列方式。它的基本思想是从左上角开始,按照“左-下-右-上”的顺序填充元素,形状如同蛇的蜿蜒移动。这种矩阵在处理二维数据时有着广泛的应用,例如在矩阵的打印、...
锯齿形扫描则是一种特定的访问矩阵元素的顺序,它按照从左到右,从上到下,然后从右到左,再从下到上的路径遍历矩阵,形成Z字形路径。 在MATLAB编程中,实现锯齿形扫描可以用于多种目的,例如数据编码、图像处理或...
`fonts.h`可能是包含预定义字符字形的头文件,用于在屏幕上打印文本。 4. DAC0832数模转换器: DAC0832是一个8位的电压输出数模转换器,能够将数字信号转换为模拟电压。在嵌入式系统中,它常用于音频输出、模拟信号...
29.顺时针打印矩阵 Array 30.包含min函数的栈 Stack 31.栈的压入弹出序列 Stack 常考 32.从上往下打印二叉树 Tree 常考 32.按之字形顺序打印二叉树 Tree 32.把二叉树打印成多行 Tree 33.二叉搜索树的后序遍历...
在此过程中,打印针会根据预设的字符库中的字形编码矩阵,逐点激发打印针击打色带,进而将字符或图形的形状转移到打印纸上。 具体而言,针式打印机的操作流程如下: 1. **初始化**:通电后,用户按下进纸键,打印机...
--1043行:“之“字形打印矩阵 --1118行:在行列都排好序的矩阵中找数k --1167行:给定一个链表的头节点head,请判断该链表是否为回文结构三种方法,额外空间复杂度分别为n 2/n 1 注意链表的定义,加上默认构造函数 ...
按之字形顺序打印二叉树,把二叉树打印成多行,把数组排成最小的数,把字符串转化成整数,包含min函数的栈,变态青蛙跳,表示数值的字符串,不用加减乘除做加法,丑数,从上往下打印二叉树,从尾到头打印链表,第一个只出现一次...
20. 顺时针打印矩阵 21. 包含min函数的栈 22. 判断一个栈是否是另一个栈的弹出序列 23. 层序遍历二叉树 24. 后序遍历二叉搜索树 25. 二叉树中和为某值的路径 26. 复杂链表的复制 27. 二叉搜索树转换为双向链表...
与螺旋矩阵不同,蛇形矩阵中的数字呈现Z字形分布。代码利用了双层循环和计数变量来填充二维数组,根据循环的奇偶性决定填充的方向,最终得到蛇形分布的矩阵。 ### 汉诺塔问题 汉诺塔问题是一种经典的递归问题,...
现在转向“字体”这一话题,字体是计算机显示和打印文本时所用到的一种样式。字体包括字形、大小、间距、粗细等属性,决定了文本的视觉呈现。在IT领域,字体设计和管理对于用户界面的美观性和可读性至关重要。操作...
6. **z字形扫描1.cpp**:Z字形扫描通常指的是按照Z字形路径遍历二维数组,比如打印棋盘或者处理文本。这个题目可能要求实现这种扫描方式。 7. **相邻区域.cpp**:可能涉及到图形或网格中的相邻元素查找,例如在地图...
矢量字体通常使用贝塞尔曲线或其他曲线公式来构造,使得字符边缘平滑,适用于高质量的打印和高分辨率显示。 编码式字符生成(directText)则涉及到字符编码,如ASCII码或Unicode,它直接根据字符编码在字体库中查找...
Commodore MPS 803本身具有一个称为的非标准ASCII变体,缺少许多带有重音符号的符号(如带重音符号的字母),其中包括一些非标准字形: 使用cbmtext ,MPS 803将能够打印现代文本文件( 编码),包括带有国际字符...
之字形转换 3总和 从列表末尾删除第 N 个节点 合并两个排序列表 合并 k 个排序列表 有效数独 排列 组字谜 螺旋矩阵 合并间隔 独特的路径 独特的路径 II 最小路径和 解码方式 二叉树中序遍历 验证二叉搜索树 对称树 ...
* 顺时针打印矩阵 * 定义一个栈,实现 min 函数 * 栈的压入弹出 * 从上往下打印二叉树 * 二叉搜索树的后序遍历 * 二叉树中和为某一值路径 * 复杂链表的复制 * 二叉搜索树与双向链表 * 字符串的排列 * 数组中出现次数...
这是一个经典的矩阵操作问题,通常要求按照“之”字形顺序填充或打印矩阵。涉及的知识点包括:多维数组的操作,循环结构,以及对二维数组的索引理解。 3. **华为 - 成绩排序.c** 这可能是一个基于数组的排序问题...
18. 顺时针打印矩阵:按照顺时针的方向打印出矩阵中的所有元素。 19. 包含min函数的栈:实现一个栈,在其中增加min函数,可以获得栈中最小值。 20. 栈的压入、弹出序列:输入两个序列,判断第二个序列是否为第一个...
最后,程序打印出整个矩阵。 这个题目挑战了C语言的逻辑思维和算法设计能力,尤其是对于二维数组的操作和递归模式的理解。解决这个问题需要对循环和数组有深入的理解,同时能够根据问题的特点构建合适的计算公式。...