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

“之”字形打印矩阵

 
阅读更多

【题目】

给定一个矩阵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++];
			}
		}
	}
}

 

分享到:
评论

相关推荐

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

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

    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. 二叉搜索树转换为双向链表...

    使用 MATLAB 可视化科学数据(详细在线教程)

    MATLAB 具有丰富的功能,可将向量和矩阵显示为图形,以及注释和打印这些图形。它包括用于二维和三维数据可视化、图像处理、动画和演示图形的高级功能。在 MATLAB 中创建图形有两种基本方法。您可以使用 MATLAB GUI ...

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

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

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

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

    leetcode和oj-Algorithm:一个曾经共享一些通用算法的项目

    字形打印二叉树 排序 冒泡排序 快速排序 归并排序 背包问题..持续更新中 LCS 素数筛选法 剑指offer刷题 反转链表 前k小的数 链表相关 镜像的二叉树 Z字型打印二叉树 回溯法 机器人的运动范围 矩阵中的路径 leetcode...

    leetcode63-LeetCode-Cpp:C++版本的LeetCode算法

    顺时针打印二维矩阵】 15. 【LeetCode55 一维数组,跳跃游戏】 16. 【LeetCode59 顺时针打印螺旋矩阵方阵】 sort topic 1. 2. 3. 4. 5. 6. 7. 8. 9. binary-search topic 1. 【有序数据中,查找等于target的index...

    数据结构课程设计—骑士漫游(马踏棋盘)

    对每次实验,按照棋盘矩阵的方式,打印每个格被行径的顺序编号。 技术提示: 解决这类问题的关键是考虑数据在计算机中的存储表示。可能最自然的表示方法就是把棋盘存储在一个8*8的二维数组board中。以(x,y)为起点时...

    LeetCode解题总结

    LeetCode解题总结 ...15.8.1 螺旋打印矩阵 15.8.2 生成螺旋矩阵 15.9 Z字形输出字符串 15.10 不使用乘、除、取模实现两个整数相除 15.11 文本对齐 15.12 共线的最大点数 16 其他问题 16.1 随机数生成器

    达内 coreJava 习题答案

    其中a为1至9之中的一个数,项数也要可以指定。 import java.util.Scanner; class Multinomial{ public static void main(String[] args){ int a; //定义输入的 a int howMany; //定义最后的一项有多少个数字 ...

    C# for CSDN 乱七八糟的看不懂

    没法下载,到这里折腾一把试试。 本文由abc2253130贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 C#(WINFORM)学习 一、 C#基础 基础 类型和变量 类型和变量 类型 C# 支持两...

Global site tag (gtag.js) - Google Analytics