`
hcx2013
  • 浏览: 88809 次
社区版块
存档分类
最新评论

“之”字形打印矩阵

 
阅读更多

【题目】

给定一个矩阵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. **自定义遍历**:根据具体需求...

    递归遍历矩阵.rar

    在分析和处理矩阵数据时,递归遍历只是众多方法之一。根据具体应用场景,还可以结合其他算法,如深度优先搜索(DFS)或广度优先搜索(BFS),以及不同的遍历顺序,如螺旋遍历、Z字形遍历等。 总结来说,"递归遍历...

    ACM算法-蛇行矩阵等

    蛇形矩阵,又称Z字形矩阵,是一种特殊的二维数组排列方式。它的基本思想是从左上角开始,按照“左-下-右-上”的顺序填充元素,形状如同蛇的蜿蜒移动。这种矩阵在处理二维数据时有着广泛的应用,例如在矩阵的打印、...

    毕业设计MATLAB_矩阵的锯齿形扫描.zip

    锯齿形扫描则是一种特定的访问矩阵元素的顺序,它按照从左到右,从上到下,然后从右到左,再从下到上的路径遍历矩阵,形成Z字形路径。 在MATLAB编程中,实现锯齿形扫描可以用于多种目的,例如数据编码、图像处理或...

    arm1138矩阵键盘nokia5110 DAC0832

    `fonts.h`可能是包含预定义字符字形的头文件,用于在屏幕上打印文本。 4. DAC0832数模转换器: DAC0832是一个8位的电压输出数模转换器,能够将数字信号转换为模拟电压。在嵌入式系统中,它常用于音频输出、模拟信号...

    目前最火最热门的python经典编程题之2

    29.顺时针打印矩阵 Array 30.包含min函数的栈 Stack 31.栈的压入弹出序列 Stack 常考 32.从上往下打印二叉树 Tree 常考 32.按之字形顺序打印二叉树 Tree 32.把二叉树打印成多行 Tree 33.二叉搜索树的后序遍历...

    打印机基本工作原理--完整版.doc

    在此过程中,打印针会根据预设的字符库中的字形编码矩阵,逐点激发打印针击打色带,进而将字符或图形的形状转移到打印纸上。 具体而言,针式打印机的操作流程如下: 1. **初始化**:通电后,用户按下进纸键,打印机...

    leetcode中国-codePractice:代码实践

    --1043行:“之“字形打印矩阵 --1118行:在行列都排好序的矩阵中找数k --1167行:给定一个链表的头节点head,请判断该链表是否为回文结构三种方法,额外空间复杂度分别为n 2/n 1 注意链表的定义,加上默认构造函数 ...

    剑指offer算法题Python源码带详细思路注释(68道).zip

    按之字形顺序打印二叉树,把二叉树打印成多行,把数组排成最小的数,把字符串转化成整数,包含min函数的栈,变态青蛙跳,表示数值的字符串,不用加减乘除做加法,丑数,从上往下打印二叉树,从尾到头打印链表,第一个只出现一次...

    《剑指Offer》题目及代码.zip

    20. 顺时针打印矩阵 21. 包含min函数的栈 22. 判断一个栈是否是另一个栈的弹出序列 23. 层序遍历二叉树 24. 后序遍历二叉搜索树 25. 二叉树中和为某值的路径 26. 复杂链表的复制 27. 二叉搜索树转换为双向链表...

    c++课程设计

    与螺旋矩阵不同,蛇形矩阵中的数字呈现Z字形分布。代码利用了双层循环和计数变量来填充二维数组,根据循环的奇偶性决定填充的方向,最终得到蛇形分布的矩阵。 ### 汉诺塔问题 汉诺塔问题是一种经典的递归问题,...

    Matrixs

    现在转向“字体”这一话题,字体是计算机显示和打印文本时所用到的一种样式。字体包括字形、大小、间距、粗细等属性,决定了文本的视觉呈现。在IT领域,字体设计和管理对于用户界面的美观性和可读性至关重要。操作...

    西电大一c语言oj部分题目答案.zip

    6. **z字形扫描1.cpp**:Z字形扫描通常指的是按照Z字形路径遍历二维数组,比如打印棋盘或者处理文本。这个题目可能要求实现这种扫描方式。 7. **相邻区域.cpp**:可能涉及到图形或网格中的相邻元素查找,例如在地图...

    计算机图形学字符的生成算法

    矢量字体通常使用贝塞尔曲线或其他曲线公式来构造,使得字符边缘平滑,适用于高质量的打印和高分辨率显示。 编码式字符生成(directText)则涉及到字符编码,如ASCII码或Unicode,它直接根据字符编码在字体库中查找...

    cbmtext:使用兼容Commodore MPS 803的老式打印机从现代PC打印Unicode文本文件(UTF-8编码)

    Commodore MPS 803本身具有一个称为的非标准ASCII变体,缺少许多带有重音符号的符号(如带重音符号的字母),其中包括一些非标准字形: 使用cbmtext ,MPS 803将能够打印现代文本文件( 编码),包括带有国际字符...

    lrucacheleetcode-LeetCode:力扣算法解决方案

    之字形转换 3总和 从列表末尾删除第 N 个节点 合并两个排序列表 合并 k 个排序列表 有效数独 排列 组字谜 螺旋矩阵 合并间隔 独特的路径 独特的路径 II 最小路径和 解码方式 二叉树中序遍历 验证二叉搜索树 对称树 ...

    前端大厂最新面试题-算法.docx

    * 顺时针打印矩阵 * 定义一个栈,实现 min 函数 * 栈的压入弹出 * 从上往下打印二叉树 * 二叉搜索树的后序遍历 * 二叉树中和为某一值路径 * 复杂链表的复制 * 二叉搜索树与双向链表 * 字符串的排列 * 数组中出现次数...

    编程题刷的题库

    这是一个经典的矩阵操作问题,通常要求按照“之”字形顺序填充或打印矩阵。涉及的知识点包括:多维数组的操作,循环结构,以及对二维数组的索引理解。 3. **华为 - 成绩排序.c** 这可能是一个基于数组的排序问题...

    剑指offer(牛客网)

    18. 顺时针打印矩阵:按照顺时针的方向打印出矩阵中的所有元素。 19. 包含min函数的栈:实现一个栈,在其中增加min函数,可以获得栈中最小值。 20. 栈的压入、弹出序列:输入两个序列,判断第二个序列是否为第一个...

    C语言经典题目晕代码.pdf

    最后,程序打印出整个矩阵。 这个题目挑战了C语言的逻辑思维和算法设计能力,尤其是对于二维数组的操作和递归模式的理解。解决这个问题需要对循环和数组有深入的理解,同时能够根据问题的特点构建合适的计算公式。...

Global site tag (gtag.js) - Google Analytics