顺时针打印数字矩阵

顺时针螺旋顺序填充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

华为海思IC前端中后端(COT&XPU)岗位笔试机考题

华为海思COT和XPU部门IC前端,IC中端,IC后端岗位笔试真题分享

weixin_37584728的博客 3362

带你一分钟了解电感与磁珠的区别

在电路设计中会经常使用到电感和磁珠,虽然在电路中的作用有所不同,但它们都属于磁性电子元器件,本文简单介绍下电感和磁珠的区别电感和磁珠电感和磁珠的结构主要由磁性材料金属线圈和外壳组成,具体结构如下图所示:电感磁珠结构图电感其实是金属线圈缠绕在磁芯上,而磁珠是在内部折叠后外围包裹着铁氧体磁性材料。电感器(Inductor)又称扼流器、电抗器、动态电抗器是储能器件,能够把电能转化为磁能而存储起来的元件。磁珠则是能量转换(消耗)器件,将流过他的高频信号以热能的形式消耗掉。

攻城狮鹏哥 1409

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

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

Quinn0918的博客 1980

CMap数据库实战:从基因表达谱到药物重定位的可视化分析

本文详细介绍了如何利用CMap数据库进行药物重定位的可视化分析。通过实战演示,从差异基因列表准备、CMap查询参数设置,到结果筛选与高级可视化(如热图与OncoPrint风格图),系统讲解了从数据到洞察的全流程,并提供了关键的解读与验证指南,帮助研究者高效挖掘老药新用的潜力。

mango的博客 587

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

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

ai15013602354的博客 568

Plant simulation、Flexsim、Automod、Emulate3D、VisuaComponent仿真软件对比

E3D在行业内以展示效果好,入门阶段易学易用人机界面友好,电控仿真连接方便不需要借助其他第三方软件,E3D平台开放度较高用户DIY程度强,数据分析功能针对要评定对象的KPI的可根据项目或者使用者需求进行评定。3.支持导入导出多种格式的文件,比如dwg、dxf、fbx、obj、3ds、step、stp、iges、skp、stl、wrl、 bmp 等等。3.软件自带模型组件库程序代码开放,用户可以引用、修改、拷贝,按照自己的逻辑修改模型,或者创建模型并保存到组件库与别人共享。3. 支持导出布局图片。

qq_43342303的博客 3580

5分钟搞定!用ZLMediaKit搭建GB28181视频监控系统(含避坑指南)

本文提供了一份基于ZLMediaKit搭建GB28181视频监控系统的实战指南。文章详细介绍了从环境准备、核心组件(ZLMediaKit与SIP服务器)部署、摄像头配置到内外网穿透的完整流程,并重点分享了设备ID配置、防火墙设置等关键避坑经验,帮助开发者快速构建稳定可控的监控平台。

apple5的专栏 1084

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

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

Mr_Ghost812的博客 546

Cadence IC618/Spectre231安装避坑指南:详解环境变量配置与License管理那些事儿

本文深入解析Cadence IC618/Spectre231安装过程中的环境变量配置与License管理难题,提供从变量冲突解决到高效License管理的实用方案。针对常见的64位标识冲突、路径污染及License服务器连接问题,给出具体诊断步骤和优化建议,帮助用户构建稳定可靠的EDA环境。

weixin_33737134的博客 616

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

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

samwalt的博客 422

海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果

第一次使用海康视觉算法平台VisionMaster 4.3.0,项目中要使用这个平台进行视觉处理并获取结果。

StevenChen的博客 7874

第4.4节:保护轴承与安全系统

飞轮储能系统的保护轴承是磁悬浮失效时的最后安全屏障,其设计需满足非干涉性、高可靠性和有限寿命承载原则。转子跌落过程包括自由下落、碰撞、进动和滑行减速等复杂非线性阶段,产生远超常规工况的冲击载荷。保护轴承需具备极限冲击容量、高温耐受性和抗卡死能力。系统采用多层级安全架构,结合故障诊断与健康管理,通过监测振动、电流等参数实现预测性维护。安全停机序列有序结合主动制动与被动摩擦制动,确保系统在极端工况下的安全。保护轴承类型多样,需根据系统规模与可靠性要求合理选择。

技术工作者 227

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

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

yangnianjinxin的博客 3401

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

顺时针打印数字矩阵——哔哩哔哩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、付费专栏及课程。

余额充值