算法习题之宏观分层问题

news2024/11/16 18:05:58

宏观分层

  • 习题1 给定一个正方形矩阵matrix,原地调整成顺时针90度转动的样子
  • 习题2 给定一个长方形矩阵matrix,实现转圈打印
  • 习题3 给定一个正方形或者长方形矩阵matrix,实现zigzag打印
  • 习题4 输入N,在控制台上输出初始边长为N的图案

习题1 给定一个正方形矩阵matrix,原地调整成顺时针90度转动的样子

a b c g d a
d e f h e b
g h i i f c

public static void spiralOrderPrint(int[][] matrix) {
		int tR = 0;
		int tC = 0;
		int dR = matrix.length - 1;
		int dC = matrix[0].length - 1;
		while (tR <= dR && tC <= dC) {
			printEdge(matrix, tR++, tC++, dR--, dC--);
		}
	}

	public static void printEdge(int[][] m, int tR, int tC, int dR, int dC) {
		if (tR == dR) {
			for (int i = tC; i <= dC; i++) {
				System.out.print(m[tR][i] + " ");
			}
		} else if (tC == dC) {
			for (int i = tR; i <= dR; i++) {
				System.out.print(m[i][tC] + " ");
			}
		} else {
			int curC = tC;
			int curR = tR;
			while (curC != dC) {
				System.out.print(m[tR][curC] + " ");
				curC++;
			}
			while (curR != dR) {
				System.out.print(m[curR][dC] + " ");
				curR++;
			}
			while (curC != tC) {
				System.out.print(m[dR][curC] + " ");
				curC--;
			}
			while (curR != tR) {
				System.out.print(m[curR][tC] + " ");
				curR--;
			}
		}
	}

	public static void main(String[] args) {
		int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 },
				{ 13, 14, 15, 16 } };
		spiralOrderPrint(matrix);

	}

习题2 给定一个长方形矩阵matrix,实现转圈打印

a b c d
e f g h
i j k L
打印顺序:a b c d h L k j I e f g

public static void rotate(int[][] matrix) {
		int a = 0;
		int b = 0;
		int c = matrix.length - 1;
		int d = matrix[0].length - 1;
		while (a < c) {
			rotateEdge(matrix, a++, b++, c--, d--);
		}
	}

	public static void rotateEdge(int[][] m, int a, int b, int c, int d) {
		int tmp = 0;
		for (int i = 0; i < d - b; i++) {
			tmp = m[a][b + i];
			m[a][b + i] = m[c - i][b];
			m[c - i][b] = m[c][d - i];
			m[c][d - i] = m[a + i][d];
			m[a + i][d] = tmp;
		}
	}

	public static void printMatrix(int[][] matrix) {
		for (int i = 0; i != matrix.length; i++) {
			for (int j = 0; j != matrix[0].length; j++) {
				System.out.print(matrix[i][j] + " ");
			}
			System.out.println();
		}
	}

	public static void main(String[] args) {
		int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
		printMatrix(matrix);
		rotate(matrix);
		System.out.println("=========");
		printMatrix(matrix);

	}

习题3 给定一个正方形或者长方形矩阵matrix,实现zigzag打印

0 1 2
3 4 5
6 7 8
打印: 0 1 3 6 4 2 5 7 8

public static void printMatrixZigZag(int[][] matrix) {
		int tR = 0;
		int tC = 0;
		int dR = 0;
		int dC = 0;
		int endR = matrix.length - 1;
		int endC = matrix[0].length - 1;
		boolean fromUp = false;
		while (tR != endR + 1) {
			printLevel(matrix, tR, tC, dR, dC, fromUp);
			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;
		}
		System.out.println();
	}

	public static void printLevel(int[][] m, int tR, int tC, int dR, int dC, boolean f) {
		if (f) {
			while (tR != dR + 1) {
				System.out.print(m[tR++][tC--] + " ");
			}
		} else {
			while (dR != tR - 1) {
				System.out.print(m[dR--][dC++] + " ");
			}
		}
	}

	public static void main(String[] args) {
		int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
		printMatrixZigZag(matrix);

	}

习题4 输入N,在控制台上输出初始边长为N的图案

在这里插入图片描述

public static void printStar(int N) {
		int leftUp = 0;
		int rightDown = N - 1;
		char[][] m = new char[N][N];
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				m[i][j] = ' ';
			}
		}
		while (leftUp <= rightDown) {
			set(m, leftUp, rightDown);
			leftUp += 2;
			rightDown -= 2;
		}
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				System.out.print(m[i][j] + " ");
			}
			System.out.println();
		}
	}

	public static void set(char[][] m, int leftUp, int rightDown) {
		for (int col = leftUp; col <= rightDown; col++) {
			m[leftUp][col] = '*';
		}
		for (int row = leftUp + 1; row <= rightDown; row++) {
			m[row][rightDown] = '*';
		}
		for (int col = rightDown - 1; col > leftUp; col--) {
			m[rightDown][col] = '*';
		}
		for (int row = rightDown - 1; row > leftUp + 1; row--) {
			m[row][leftUp + 1] = '*';
		}
	}

	public static void main(String[] args) {
		printStar(5);
	}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

U盘数据丢失是什么原因?轻松让U盘数据恢复的教程

在数字化时代&#xff0c;我们不可避免地使用各种便携式存储设备&#xff0c;如U盘&#xff0c;来传输和存储重要数据。然而&#xff0c;有时我们可能不小心删除了U盘中的文件&#xff0c;或者格式化了U盘等等而导致数据丢失。这种情况下&#xff0c;你可能会困惑地想知道&…

机器学习——基于Tensorflow和Keras实现卷积神经网络CNN——猫狗分类

文章目录 环境的配置神经网络CNN的介绍卷积前馈神经网络卷积神经网络应用邻域 数据集准备数据预处理构建基准模型 总结什么是过拟合&#xff08;overfit&#xff09;&#xff1f;什么是数据增强&#xff1f;单独制作数据增强&#xff0c;精确率提高了多少&#xff1f; 然后再添…

硬件大熊原创合集(2023/06更新)

06月份更新篇章&#xff1a; 一款射频芯片的layout设计指导案例-篇章1 一款射频芯片的layout设计指导案例-篇章2 警惕超声波工艺对晶振造成损伤 走嵌入式方向&#xff0c;一定要软硬件都懂吗&#xff1f; 6月份广州光亚展&#xff0c;和电子电力大咖文老师见了个面&#xff0c;…

2023车载摄像头9大热点趋势

摘要&#xff1a; 相较于消费类电子摄像头&#xff0c;车载摄像头的工作环境极度恶劣&#xff0c;比如说震动、高温、雨雾、低温、光线变化剧烈等。而车载摄像头以驾驶安全为目的&#xff0c;上述各个工作状态下&#xff0c;均需要能获取稳定、可靠、清晰的周边环境数据。 近年…

HOT36-二叉树的中序遍历

leetcode原题链接&#xff1a;二叉树的中序遍历 题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a…

BUUCTF藏藏藏

也是一个图片文件&#xff0c;和一个txt文件 txt文件中是一个提交flag格式&#xff0c;没啥用 拿去010打开后发现可能存在隐藏文件 这个格式说明还有解压文件吧&#xff0c;但是为啥分离不出来呢 刚好有另外一个分离文件的软件foremost 解压后打开在zip文件下有一个福利docx文件…

【零基础入门学习Python---Python网络编程保姆级教程】

&#x1f680; Python &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

GDB寻找segmentation fault位置

一、在当前文件夹下生成指定二进制文件的core文件 查看允许core文件空间大小&#xff1a; ulimit -c修改core文件空间为无限大&#xff1a; ulimit -c unlimited让core文件生成在当前目录下&#xff1a; sudo bash -c echo core.%e.%p > /proc/sys/kernel/core_pattern再…

2023黑马头条.微服务项目.跟学笔记(二)

2023黑马头条.微服务项目.跟学笔记 二 app端文章查看&#xff0c;静态化freemarker,分布式文件系统minIO今日简介学习内容1.文章列表加载1.1 需求分析1.2 表结构分析思考:表的垂直拆分 1.3 导入文章数据库1.3.1 导入数据库1.3.2 导入对应的实体类总结 1.4 实现思路1.4.1 sql练习…

hippo - 提升我们团队工程效率的工具

1. 背景 我们 shopeepay 团队是一个比较大的前端团队&#xff08;80成员&#xff09;&#xff0c;团队内部分布着 react native、javascript npm包、react component npm包、serverless、普通的react工程等多种类型的项目&#xff0c;每种项目类型中的每个项目都有它们自己的配…

Windows 使用Git使用Gitee仓库

1.本地创建文件夹。图中例子&#xff0c;我在桌面创建了文件夹。 2.打开 Git Bash Here. 3.Git Bash 的部分指令。 ls 查看当前文件夹 mkdir gittest01 创建文件夹 cd gittest01 进入文件夹 git init 创建本地仓库 git config --global user.name"chengqian" 创建者…

Redis主从复制模式的2

搭建完后可以去测试一下这几个问题: 1.主机中的数据会复制到从节点中 2.主机中新增的数据会同步到从节点中 3.redis集群后,从节点只能读(slave),主节点可以写(master) 4.主机重启后还是主节点 5.从机重启后也会变成主节点 血脉相传 一个主机master理论上可以有多个从机slave…

抖音短视频矩阵号系统开发者开源部署分享(一)

抖音是一款备受欢迎的短视频APP&#xff0c;拥有数亿的用户&#xff0c;其中包括了大量的粉丝。为了让更多的人能够发现和观看到你的视频&#xff0c;抖音SEO是必不可少的一环&#xff0c;特别是对于拥有企业或个人品牌的用户来说。在这个过程中&#xff0c;抖音SEO源码的开源部…

【前端工程化】比gzip压缩更优的br压缩

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步…

2.4g无线芯片G350产品介绍

G350是一款2.4GHz的无线收发芯片&#xff0c;具有低成本和高集成度的特点。它集成了发射机、接收机、频率综合器和GFSK调制解调器&#xff0c;为无线通信系统提供了完整的解决方案。 该芯片采用了低功耗设计&#xff0c;在各个环节都降低功耗以提高电池使用寿命。即使在最低电流…

STM32 Proteus UCOSII系统简易时钟计时系统-0054

STM32 Proteus UCOSII系统简易时钟计时系统-0054 Proteus仿真小实验&#xff1a; STM32 Proteus UCOSII系统简易时钟计时系统-0054 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 LCD1602显示器 1.单片机程序使用UCOSII操作系统&#xff0c;显示任务、时间计算任…

【Python 随练】学用 line 函数画直线

题目&#xff1a; 画图&#xff0c;学用line函数画直线。 简介&#xff1a; 在本篇博客中&#xff0c;我们将介绍如何使用Python的绘图库来画直线。我们将使用line函数来绘制直线&#xff0c;并提供一个完整的代码示例来演示其用法。 绘制直线&#xff1a; 要绘制直线&…

开源项目管理工具Plane

本文软件由网友 不长到一百四誓不改名 推荐&#xff0c;不过这次是在他推荐之前&#xff0c;就已经完成了的 &#x1f642; 什么是 Plane &#xff1f; Plane 是一个简单的、可扩展的、开源的项目和产品管理工具。它允许用户从一个基本的任务跟踪工具开始&#xff0c;逐步采用各…

初步学习使用SpringBoot框架

对于SpringBoot框架介绍大家可以看看这个这篇文章&#xff0c;SpringBoot优缺点以及如何安装使用 以下我是按照老师给的安装方法进行安装使用SpringBoot框架&#xff1a; 大家安装SpringBoot框架时候&#xff0c;最好安装3.0以下的&#xff0c;不然需要对应较高版本的JDK版本&…

导航栏,封装Api接口,数据处理 过滤器,Echarts使用(二)

文章目录 一、左侧导航栏El的元素颜色重写导航开启router模式导航栏折叠&#xff08;兄弟页面传数据 借助父亲&#xff09; 二、封装请求的Api接口接口地址管理配置跨域 三、数据处理 过滤器四、使用EchartsDemo: 使用 ECharts项目中使用Echarts 接上篇&#xff08;一&#xff…