顺时针打印数字矩阵

顺时针螺旋顺序填充n*n的二维数组(java) 输入一个整数n,为二维数组的边长 然后以顺时针螺旋的顺序把1-n*n填入这个数组 比如 输入3 输出 1 2 3 8 9 4 7 6 5 这里我使用了一种通过坐标之间的数学规律来实现这个算法, 这个方法不以顺时针螺旋的顺序一个一个赋值,而是以对角线的顺序赋值 所以这个方法不需要判断坐标的加减来找到下一个要赋值的坐标,对于我个人而言方便一些 这里再举几个例子方便理解 输入4 输出 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 输入5 输出 阅读详情

题意:

假如有矩阵(二维数组):

1 2 3 4

5 6 7 8

9 10 11 12

12 14 15 16

则依次打印出数字:1,2,3,4,8,12,16,15,14,12,9,5,6,7,11,10

即顺时针打印。

几种需要注意的情况:

第一种:

1 2 3

4 5 6

结果为:1,2,3,6,5,4

第二种:

1

2

3

结果为:1,2,3

第三种:

1 2 3

结果为:1,2,3

以上三种是数字不足一圈的情况,也需要考虑进去。


分析:

这道题有好几种解法,如考虑到每一圈的起点都是左上角的坐标,如(0,0),(1,1),(2,2)....(startX,startY)坐标是每一圈的起点,假设该数字矩阵为n*m,则只要满足n>startX*2并且m>startY*2就可以以(startX,startY)为起点打印新的一圈,反之结束打印。接下来的问题就是如何打印一圈。就是分成四步来打印,这里不做讨论。

这里另一种解法思路:

分四步打印矩形:

1.从左到右,当等于截止点即跳转到第二步(这里的截止点是不固定,打印第一圈该截止点是矩阵的列数,接下来该截止点每次递减1)

2.从上到下,同上,当等于截止点则跳到第三步(这里的截止点变为矩阵行数)

3.从右到左,当等于截止点则跳转到第四步(这里的截止点初始值为-1,之后每次递增1)

4.从下到上,同上(这里的截止点的初始值为0,之后每次递增1)

java代码如下:

public class PrintMatrixInCircle {
	public static void main(String[] args) {
		// 循环打印数组数字
		int[][] datas = new int[][] {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
		int rows = datas.length; //
		int clos = rows > 0 ? datas[0].length : 0;
		for (int i = 0; i < rows; i++) {
			for (int j = 0; j < clos; j++) {
				System.out.format("%-3d", datas[i][j]);
			}
			System.out.println();
		}
		System.out.print("The Result Is:");
		print(datas);
	}

	public static void print(int[][] datas) {
		if (datas == null||datas.length==0)
			return;
		int rows = datas.length;//矩阵行数
		int clos = rows > 0 ? datas[0].length : 0; //矩阵列数
		int left = -1;//从右往左打印截止点
		int up = 0;//从下往上打印截止点
		int i = 0; //行坐标
		int j = 0;//列坐标
		int type = 0;//打印类型,0表示从左到右,1表示从上到下,2表示从右到左,3表示从下到上
		int count = 0; //打印次数,当打印次数等于矩阵数字总数则打印结束
		int sums = rows * clos; //矩阵数字总数
		while (count < sums) {
			count++;
			switch (type) {
			case 0: { // 向右
				System.out.print(datas[i][j] + " ");
				j++;
				if (j == clos) {
					j--;// 下一个坐标
					i++;
					type = 1;
					clos--;//截止点递减1
				}

			}
				
				break;
			case 1: { // 向下

				System.out.print(datas[i][j] + " ");
				i++;// 向下
				if (i == rows) {
					i--;
					j--;
					type = 2;
					rows--;
				}
			}
				
				break;
			case 2: { // 向左
				System.out.print(datas[i][j] + " ");
				j--;// 向左
				if (j == left) {
					j++;
					i--;
					type = 3;
					left++;
				}
			}
				
				break;
			case 3: { // 向上
				System.out.print(datas[i][j] + " ");
				i--;
				if (i == up) {
					i++;
					j++;
					type = 0;
					up++;
				}
			}
				break;
			}
		}
	}

输出结果:

1  2  3  4  
5  6  7  8  
9  10 11 12 
13 14 15 16 
The Result Is:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 
python输出数字方阵_python实现顺时针打印矩阵 面试题之顺时针打印矩阵,Python实现,供大家参考,具体内容如下问题描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,输入如下矩阵:则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:每次打印并删除矩阵的第一行,然后将矩阵逆时针翻转90度,直至打印出全部结果具体代码实现如下:# coding:utf-8class Solut... 阅读详情

相关推荐

android 算法题(顺时针打印矩阵,数字字符串反转输出 ,阶乘)

第一题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 输入一个矩阵如下: 11 1 2 13 14 15 16 17 18 19 20 21 22 23 24 25 26 则依次打印出数字:11,12,13,14,18,22,26,25,24,23,19,15,16,17,21,20 //在圆圈中打印矩阵 public void printMatrixInCircle(int[][] numbers, int cols, int

安卓兼职framework和app工程师的博客 1698

刷题精选:顺时针输出递增数组(螺旋递增升天数组)

由上图描述,输入一个数字n,代表n行n列,之后经过函数之后顺时针的将从1到n打印出来。通过找规律,我们可以发现,最终的结果是一个正方形,那么我们可以联想到用一个二维数组按顺序来存储这些数字,最后输出二维数组即可,同时,这些数字是一圈一圈按照顺时针递增的,因此我们可以将这个二维数组拆开一圈一圈来看,我们画图来表示一下 以n=5为例 最后的二维数组需要储存成这个样子,那么我们可以将其分为三圈 第一圈: 第二圈: 第三圈: 我们如果按照圈来储存的话,那么他们按照顺时针存储的规律就是一样的了,即先顺序的储存

bit_zhy的博客 384

编程笔试(解析及代码实现):顺时针打印矩阵。输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

编程笔试(解析及代码实现):顺时针打印矩阵。输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 目录 题目描述 代码实现 题目描述 顺时针打印矩阵。输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4*4矩阵,则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 代码实现 顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4*4矩

Show Me The Code 648

二维数组中,每一行每一列按照从左到右递增顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间复杂度小于O(n) ,空间复杂度O(1).

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成 一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间复杂度小于O(n) ,空间复杂度 O(1).

fengxia110的博客 238

【雷达图】R语言绘制雷达图(ggradar),NBA季后赛数据为例

一起用R语言给nba球星画球技雷达图吧!

池塘春草梦的博客 6252

【实战指南】WinPE环境下360系统急救箱的病毒查杀全流程解析

本文详细解析了在WinPE环境下使用360系统急救箱进行病毒查杀的全流程。从制作WinPE启动盘到进入PE环境,再到360急救箱的深度使用和系统修复,提供了实用技巧和常见问题解决方案,帮助用户高效清除顽固病毒。

weixin_28568819的博客 535

有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)

题目是这样的:有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。要求:时间复杂度小于O(N); 在这里我说一下我解题的各种逻辑和方法。 一看到这个题目,最开始的时候,我是这样想的:利用循环直接遍历数组中的每一个数就行了呀! 可是后面发现如果这个数组变得非常大的话(假如是10*10的数组,要找的数在最后一个),那它的时间复杂度就是

Quinn0918的博客 1980

Ansys Zemax | 多模光纤耦合效率优化与IMAE操作数实战解析

本文详细解析了在Ansys Zemax(OpticStudio)中优化多模光纤耦合效率的实战流程。通过几何图像分析诊断初始效率,并重点介绍了如何利用IMAE操作数将分析工具转化为自动化优化引擎,实现从2%到54%的几何效率飞跃。文章还探讨了引入菲涅尔损耗与偏振计算以逼近真实效率,并分享了关键的避坑指南与高阶技巧。

xk7n92h3p5m的博客 749

【剑指offer】从二维递增数组中进行查找

算法是程序员的内功,快来和博主一起修炼内功吧!

ai15013602354的博客 568

LVGL 实战:虚拟列表与对象复用机制在嵌入式GUI中的性能优化

本文深入探讨LVGL虚拟列表与对象复用机制在嵌入式GUI中的性能优化实践。通过复用机制动态管理UI对象,大幅降低内存占用,实现无限滚动列表的流畅体验。文章详细解析核心算法、内存优化策略及跨平台适配技巧,帮助开发者在资源受限设备上高效处理大量数据展示。

rice5的博客 1106

vs code , 配置 claude code 插件, 默认选项 : --dangerously-skip-permission

摘要:本文介绍如何在VS Code中为Claude Code插件配置--dangerously-skip-permission参数,包含两种方法:图形界面设置(适合新手)和直接编辑settings.json(精准配置)。该参数会跳过权限检查,仅建议在本地测试环境中使用。配置后需通过命令面板验证参数是否生效,并注意安全风险,避免在生产环境使用。多参数配置时需用数组格式,不同版本插件可能键名略有差异。

AI天才研究院 4992

【哔哩哔哩笔试】顺时针打印数字矩阵

顺时针打印数字矩阵 给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素 输入描述 输入第一行是两个数字,分别代表行数M和列数N;接下来是M行,每行N个数字,表示这个矩阵的所有元素;当读到M=-1,N=-1时,输入终止。 输出描述: 请按逗号分割顺时针打印矩阵元素(注意最后一个元素末尾不要有逗号!例如输出“1,2,3”,而不是“1,2, 3,”),每个矩阵输出完成后记得换行 输入...

Mr_Ghost812的博客 546

leaflet 综合教程170+ 【目录 】(已包含162篇文章)

vue+leaflet系列教程旨在为开发者提供简单快捷的,。在每一个示例中,解释相应的API知识点,做到。注意本示例目录中的内容可能加载是vue+openlayers的示例, 本目录是要加载vue+leaflet的示例,只是内容少,逐渐更新中。

大剑师兰特的GIS世界 1万+

顺时针从外到内打印数字矩阵

[code="ruby"] # 打印数字矩阵到标准输出。 # 按顺时针方向,从外到内打印矩阵。起点是矩阵的左上角。 class Matrix def initialize(width) @n = 0 @width = width #矩阵的宽度 # 创建二维数组 @square = Array.new(@width) do Array...

samwalt的博客 422

芒果YOLOv5改进05:损失函数IoU 篇之Repulsion Loss:原创改进损失函数 Repulsion:解决目标遮挡场景下检测,为解决密集人群检测中遮挡设计的损失函数,打造高效检测器涨点

YOLOv5改进代码实践|结合Repulsion 解决目标遮挡场景下检测🚀

包括YOLOv5、YOLOv7、YOLOv8等模型改进 4565

从数据到行动:客服运营必分析的8大核心维度

服务运营正从被动响应升级为数据驱动型战略体系。客服中心的海量交互数据能精准反映服务效能、客户体验及运营短板,关键在于实现数据的可视化与可操作化。本文系统剖析了八类核心数据指标:1)客户行为数据(CSAT/NPS/投诉内容);2)通话效率指标(AHT/接通率);3)服务质量(质检体系/情绪识别);4)坐席绩效(FCR/客户评价);5)流程与知识库(转接率/工单时效);6)渠道流量分析;7)异常预警机制;8)成本收益模型。通过构建多维数据分析体系,企业可在客户全生命周期管理中实现服务升级、风险防控与资源

2202_75469062的博客 1400

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. package com.fit; import java.ut...

WhereIsMyChair的博客 494

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

17 顺时针打印矩阵: Java实现顺时针打印矩阵。即输入一个矩阵,按照从外向里逆时针的顺序打印出每一个数字

转载来源:https://blog.youkuaiyun.com/qq_40409115/article/details/80503624 逆时针打印矩阵,输入一个矩阵,按照从外向里逆时针的顺序打印出每一个数字。 如 输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 输出:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 首先我们观察 4 × 4的...

皮卡丘的博客 360

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

[python] 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字[顺时针打印矩阵]

算法参考: 剑指offer面试题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 - 优快云博客 http://blog.youkuaiyun.com/yanxiaolx/article/details/52254590 剑指offer_输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 - 优快云博客 http://blog.youkuaiyun.com/lingongheng/ar

yangnianjinxin的博客 3401

顺时针打印数字矩阵——哔哩哔哩2019秋招编程题

题目描述 给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素 输入描述 输入第一行是两个数字,分别代表行数M和列数N;接下来是M行,每行N个数字,表示这个矩阵的所有元素;当读到M=-1,N=-1时,输入终止。 输出描述 请按逗号分割顺时针打印矩阵元素(注意最后一个元素末尾不要有逗号!例如输出“1,2,3”,而不是“1,2, 3,”),每个矩阵输出完成后记得换行 示例 输入 3 3 1 ...

weixin_38933749的博客 396

剑指 Offer 29. 顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

剑指 Offer 29. 顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 当路径超出界限或者进入之前访问过的位置时,则顺时针旋转,进入下一个方向。 class Solution { public int[] spiralOrder(int[][] matrix) { if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { return ne

renxanshou的博客 314

输入一个矩阵,按照从外向里顺时针的顺序依次打印出每一个数字

#include #include using namespace std; //输入一个矩阵,按照从外向里顺时针的顺序依次打印出每一个数字 void printMatrix(int** numbers,int colums,int rows){ if(numbers == NULL||colums<=0||rows<=0) return; int start = 0; //条件是最后

LHN_hpu的专栏 1754

顺时针打印矩阵中的数字

顺时针打印矩阵中的数字 public static void main(String[] args){ int[][] array = {{1,2,3,4}, {6,7,8,9}, {11,12,13,14}, {16,17,18,19}, {21,22,23,24}}; int rows = array.length; int cols = array[0].len...

ninomi17的博客 181

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 实现如下: vector printMatrix(vector<vector > matrix) { vector ...

weixin_38853761的博客 613
上一篇: 算法笔记-链表
下一篇: 简单经典算法笔记(未完)
KeepThinking_
博客等级 码龄15年 50粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值