面试常见题—螺旋状矩阵(Java实现)

2020年十一届省赛蓝桥杯本科模拟赛第七题解 螺旋矩阵 第七题:螺旋矩阵 【问题描述】 对于一个n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。 例如,一个 4 行 5 列的螺旋矩阵如下: 1 2 3 4 5 14 15 16 17 6 13 20 19 18 7 12 11 10 9 8 【输入格式】 第一行包含两个整数 n, m,分别表示螺旋矩阵的行数和列数。 第二行包含两个整数 r, c,表示要求的行号和列号。 【输出格式】 输出一个整数,表示螺旋矩阵中第 r 行第 c 列的元素的值。 【样例输入】 阅读详情

打印旋转矩阵是求职面试过程中经常遇到的一道题,这里给出了具体的解法。

旋转矩阵如下所示:

源代码如下:

package seekPro;

import java.util.Scanner;

public class luoxuanMatrix {
    public static void main(String[] args){
        int i,j;
        Scanner ip=new Scanner(System.in);
        int total = ip.nextInt();
        int [][]matrix=new int[total][total];//定义二维数组中元素的个数
        matrix=retmatrix(matrix,0,0,1,total);
        for(i=0;i<total;i++){
            for(j=0;j<total;j++){
                if(j==total-1)
                    System.out.println(matrix[i][j]);
                else
                System.out.print(matrix[i][j]+"   ");
            }
        }
    }
    public static int[][] retmatrix(int[][] matrix,int x,int y,int start,int n){
        //x,y分别表示矩阵第一个元素的坐标,start表示矩阵的第一个元素,n表示矩阵元素的个数
    if(n<=0) return null;
    else if(n==1) {
        matrix[x][y]=start;
//        return matrix;
    }
    else{
        int i,j,k,m;
        for(i=y;i<y+n-1;i++){//第一步:行不变,列加1。上面一行,横坐标不变,列坐标逐渐加1,一直到最后一列,但不包括最后一列的元素
            matrix[x][i]=start++;
        }
        for(j=x;j<x+n-1;j++){//第二步:列不变,行加1。右面一列,纵坐标不变,横坐标逐渐加1,一直到最后一行,但不包括最后一行
            matrix[j][y+n-1]=start++;
        }
        for(k=y+n-1;k>y;k--){//第三步:行不变,列减1。下面一行,横坐标不变,纵坐标逐渐减1,一直到最左边的一列,但不包括最左边的一列
            matrix[j][k]=start++;
        }
        for(m=x+n-1;m>x;m--){//第四步:列不变,行减1。左面一列,纵坐标不变,横坐标逐渐减1,一直到最上面的一行,但不包括最上面的一行
            matrix[m][k]=start++;
        }
        retmatrix(matrix,x+1,y+1,start,n-2);//注意此处的各项参数,下一次开始时第一个元素的坐标:(x+1,y+1)
    }
    return matrix;
    }
}
输出结果:

6
1   2   3   4   5   6
20   21   22   23   24   7
19   32   33   34   25   8
18   31   36   35   26   9
17   30   29   28   27   10
16   15   14   13   12   11
解法二:常规方法

package seekPro;

import java.util.Scanner;

public class luoxuanMatrix2 {
    public static void main(String[] args){
        int i,j;
        Scanner ip=new Scanner(System.in);
        int total = ip.nextInt();
        int [][]matrix=new int[total][total];//定义二维数组中元素的个数
        matrix=retmatrix(matrix,1,total);
        for(i=0;i<total;i++){
            for(j=0;j<total;j++){
                if(j==total-1)
                    System.out.println(matrix[i][j]);
                else
                System.out.print(matrix[i][j]+"   ");
            }
        }
    }
    public static int[][] retmatrix(int[][] arrays,int start,int n){
        int c=0,i,j;
        int z = n*n;
        int ou=1;
        while(ou<=z){
        i=0;
        j=0;
        for(i+=c,j+=c;j<n-c;j++){  //从左到右
        if(ou>z) break;
        arrays[i][j] = ou++;
        }
        for(j--,i++;i<n-c;i++){ // 从上到下
        if(ou>z) break;
        arrays[i][j] = ou++;
        }
        for(i--,j--;j>=c;j--){//从右到左
        if(ou>z) break;
        arrays[i][j] = ou++;
        }
        for(j++,i--;i>=c+1;i--){//从下到上
        if(ou>z)  break;
        arrays[i][j] = ou++;
        }
        c++;
        }
    return arrays;
    }    
}

输出结果:

5
1   2   3   4   5
16   17   18   19   6
15   24   25   20   7
14   23   22   21   8
13   12   11   10   9

 

螺旋式遍历二维数组(矩阵)Demo 立即下载

相关推荐

用二维数组打印螺旋方阵 JAVA入门之数组

这是一个JAVA中关于二维数组的拔高题。

Java实现--构造螺旋二维数组或螺旋(顺时针)打印二维数组

二维数组,螺旋,顺时针

Rover的博客 1276

Java实现顺时针输出螺旋二维数组的方法示例

主要介绍了利用Java如何实现顺时针输出螺旋二维数组的方法示例,文中给出了详细的示例代码和注释,相信对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。

用java输出螺旋方阵,采用二维数组存储,并且用两种不同的排列形式(顺时针排列)(逆时针排列)。

i++) //i每加一次,数组再进一层。i++) //i每加一次,数组再进一层。x[i][j]=k;//第一行,依次进一层。//按行把数组分成两部分。} //最后一列,依次进一层。} //最后一行,依次进一层。} //第一列,依次进一层。

weixin_73643646的博客 1159

手把手教你用FFmpeg实操:H.264转码、AVS2编码与H.265/HEVC参数调优避坑指南

本文详细解析了使用FFmpeg进行H.264转码、AVS2编码与H.265/HEVC参数调优的实战技巧。通过具体命令示例和参数详解,帮助开发者避开常见编码陷阱,提升视频处理效率和质量,特别适合音视频开发者和内容创作者参考。

weixin_30889885的博客 486

KEIL MDK 生成bin文件实战:C51与ARM双平台配置指南

本文详细介绍了在KEIL MDK开发环境中,为C51和ARM双平台自动生成BIN文件的实战方法。针对C51平台,通过srec_cat.exe工具编写批处理脚本并集成到KEIL;针对ARM平台,则利用fromelf.exe工具直接配置。文章还提供了通用脚本方案和路径、变量、版本兼容性等常见问题的避坑指南,帮助开发者高效完成嵌入式程序部署。

weixin_29188997的博客 347

螺旋矩阵(java)

输出螺旋矩阵螺旋方阵示例代码部分 螺旋方阵 输出螺旋方阵,采用二维数组存储。螺旋方阵将从1开始的自然数由方阵的最外圈向内螺旋方式的顺序排列。 示例 代码部分 package juju0921; import java.util.Scanner; public class Juju { public static void main(String[] args) { int i=0,j=0;...

sea_r的博客 1853

C# 【WebService编写调用】

😹 觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!!

只有登上山顶,才能看到那边的风光 1175

螺旋输出一个方形的二维数组<java版>

对于给定一个方形的二维数组,让你螺旋输出它,即以固定右、下、左、上的顺序输出,由于一圈后又以该顺序循环,可以用递归的方法来做 public class CeShi { public static int n = 0;// 数组中所有元素的个数 public static boolean[][] flag = new boolean[4][4];// 标记数组,记录该元素有没有输出 pub

梁剑的专栏 2442

头歌平台-人工智能导论实验(人脸识别)

答案仅供参考,自己动手丰衣足食!!!

qq_52119136的博客 3028

手把手教你用Chrome DevTools逆向分析抖音a_bogus参数(附完整日志插桩方法)

本文详细介绍了如何使用Chrome DevTools逆向分析抖音a_bogus参数的生成逻辑,包括XHR断点定位、日志插桩追踪和加密核心逻辑解析。通过实战案例,帮助开发者掌握逆向工程技巧,应对抖音接口的动态加密变化,特别适合研究dy接口和a_bogus参数的技术人员。

weixin_27741699的博客 791

java实现螺旋矩阵、C++实现螺旋矩阵(顺时针、逆时针)

螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。如下图所示: 此类题目经常出现在各大互联网公司的面试笔试这种,今天我用c++实现输入一个整N,就打印出N*N的螺旋矩阵,源码如下:#include &lt;iostream&gt; #includ...

SeanDragon的博客 8482

wpf入门第五篇 WPF with ECharts

前言 本文是wpf入门系列第五篇,面向有winform或者web前端基础的、并且也有C#基础的同学。 ECharts是百度团队开发的开源免费的js图表控件库,非常强大,文档齐全。WPF中使用图表,除了可以选择devexpress或者oxyplot之类的专为wpf开发的图表控件之外,还可以考虑使用 WebBrowser+ECharts 来完成复杂的图表展示,其展示效果不亚于前者。 本文介绍了 WP...

wf824284257的博客 1万+

【算法】-- 【螺旋矩阵】

今天去智度科技面试,遇到一个算法题,没有答上,可惜了这次机会。 从矩阵的左上角出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1, 2, 3, … , n1,2,3,…,n,便构成了一个螺旋矩阵。2 下图是一个n = 4n=4 时的螺旋矩阵。 实现算法如下: public static void getLu...

春来桃花开的博客 1886

SolidWorks2020详细步骤安装教程

1、在安装软件前请断开网络连接,需要安装.NETFramework3.5和4.0,最后还要确保把之前安装的旧版本完全卸载,以管理员身份运行SolidWorks_Flexnet_Server\server_remove.bat,然后等到服务“SolidWorksFlexnet服务器”将被删除。12、先不要运行软件,找到_SolidSQUAD_文件夹,将文件夹“ProgramFiles\SOLIDWORKSCorp”中的所有破解文件复制替到“ProgramFiles\SOLIDWORKSCorp”目录下;

qq_53545309的博客 1万+

ardupilot 日志分析《xKF1信息》

ardupilot 日志分析系列将会把ardupilot所有的日志文档进行分析,为我们分析无人机的运行状态,炸鸡原因,传感器状态,电机状态,控制信息,滤波信息做准备。本节主要分析xKF1日志信息,欢迎批评指正。学习好ardupilot必须会分析飞行日志,从飞行日志中我们可以学到很多无人机的知识。无人机是综合知识的体现,涵盖:导航、控制、滤波、算法、协议等各种知识,只有更全面的学习,才能在无人机的道路上越走越远。

陌城烟雨 1226

悠然乱弹:螺旋矩阵和蛇型矩阵的悠然版实现

摘要 螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵,有许多的公司面试题中有出现,这两个题的答案也有许多种,简单问一下度娘,就各自有N种实现,但是整个看下来,呵呵,比较顺眼的比较少。 考虑到不同的语言有不同的语言特性,因此今天就只用Java来进行实现,看看螺旋矩阵和蛇型矩阵的悠然版实现。   螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵,有许多的公司面试题中有出现,这两个题的答案也有许多种,简单问一...

TINY框架 265

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java实现打印类似蜗牛矩阵(自己起的)效果(雷惊风)

最近同事有了跳槽的想法,接到的面试也不少,今天回来说被问到了一个算法题,题目是什么样的呢?就是要求输入一个数字打印出一个矩阵,比如我们输入的是2,则打印出的矩阵如下: 1 4 2 3   输入的是3打印的矩阵如下: 1 8 7 2 9 6 3 4 5   输入的是4打印的矩阵如下: 1  12  11  10 2  13  16  9 3  14  15  8 4  5

刘永雷的专栏 1020

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

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

顺时钟方向螺旋状打印矩阵元素

前一阵在bbs上看到的一道面试题,今日闲来无事,就写了个小小程序试了一下。 想法就是先计算要打印的行数和列数的总和(totalSteps),然后很容易就会发现 totalSteps % 4 = 0 从左到右打印最上面一行元素 (己打印的除外) totalSteps % 4 =1 从上到下打印最右面一列元素 totalSteps % 4 =2 从右到左打印最下面一行元素 total...

weixin_33974433的博客 108

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【笔试题解】顺时针打印矩阵

题目链接:顺时针打印矩阵(笔试版) 备注:《剑指offer》原题,但是在线笔试版本由于输入格式&时间限制,有许多细节需要调整。 为了避免超时的tips:(1)不能用Scanner而改用BufferedReader——这里要记住BufferedReader的使用模板&注意事项: -----1.0 需要import的有三个类,也可以直接写: import java.io.*;...

cunane的博客 232

面试4(编程)

1.题目   给定一个正整数n,构造一个n×n维的矩阵,从1,2,........到n×n使其位置的轨迹构成一个螺旋状   1 , 2 , 3 , 4 ,5 ,  16, 17, 18, 19, 6 ,  15, 24, 25, 20, 7 ,  14, 23, 22, 21, 8 ,  13, 12, 11, 10, 9 , 2.程序  1 package d...

weixin_30294709的博客 52

Morgan IT 笔试面试汇总

Morgan Stanley IT笔试题部分回忆版 笔试,Stanley 特点: 1. 题量大,43页的卷子,厚厚一摞,直接把我砸晕了。。 2. 全英文题目,全英文作答,监考人员强调,千万别写中文哦,改卷子的人看不懂滴~所以,学好英语很重要很重要,我后面答题的时候居然N多单词8会写… 3. 题目很杂,什么都有,Java,C++,C#,数据库,操作系统,网络,还有包括SMTP,IMAP什

wqfhenanxc的专栏 1万+

Morgan Stanley IT笔试面试经验

转自http://blog.youkuaiyun.com/wqfhenanxc/article/details/20965039 Morgan Stanley IT笔试题部分回忆版 特点: 1. 题量大,43页的卷子,厚厚一摞,直接把我砸晕了。。 2. 全英文题目,全英文作答,监考人员强调,千万别写中文哦,改卷子的人看不懂滴~所以,学好英语很重要很重要,我后面答题的时候居然N多单词8会

u012562106的博客 7585

算法——数组之螺旋矩阵(二维数组)

和我一起刷算法吧!今天刷的是二维数组的螺旋矩阵!

tingting0905baby的博客 1104
上一篇: 触发JVM进行Full GC的情况及应对策略
下一篇: 聊聊并发(三)Java线程池的分析和使用
It_BeeCoder
博客等级 码龄10年 967粉丝 238原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值