算法之小试牛刀——回型数组

2023-10-31

回型数组

今天偶然做到了这道稍稍有些难度的算法题,写一个回型数组,具体要求如下:
输入一个数字n,要求输出回型数组,例如:

//输入3
//输出   1 2 3
//       8 9 4
//       7 6 5
//输入4
//输出   1  2  3  4
//      10 11 12  5
//       9  8  7  6

相信大家从名字上就可以理解回型数组的形式,就是绕着中间去组成一个矩阵。这道题手写起来很容易,但是如何去编程实现还是有点难度的,因此在这里和大家分享下我的解法。

题目分析

看到题目的时候第一个想法就是按照我们人手写回型数组的方式从1一直写到n2,因此不难发现在完成数组的过程中需要依次用到向右向下向左向上四个操作,而后再进行循环,直到最终填补完成整个回型矩阵。
接下来还需要考虑几个问题:
1.假设向4个方向各填数一次,即右=>下=>左=>上各填数为一轮操作,则需要进行几轮;
2.每轮中,各个方向所填数的数量为多少;
3.当n为奇数和偶数时,有无不同。

这几个问题想来并不难得出结果,为了方便分析,我们在每一轮操作中,让每个方向填数的数量,均为需要填的矩阵的维度减1。
下图为3×3矩阵,我们进行第一轮操作时,每个方向填2个数,即向右填1,2,向下填3,4,向左填5,6,向上填7,8;在第二轮操作中,就剩下一个9.
n为奇数,3×3矩阵
下图为4×4矩阵,第一轮操作时每个方向填3个数,在进行第二轮操作时,向右填13,向下填14,向左填15,向右填16,从而完成回型数组。
n为偶数,4×4矩阵
相信大家在上述过程中,也发现了当n为奇数时,最里面一定会剩下一个数,也就是n2;而偶数的时候,最里面一定是个2×2矩阵。因此当n为奇数时,首先将中心的数填好,再完成周边的填写,而偶数时就正常填写矩阵即可。

代码展示

        //-----------------回型矩阵--------------------
        //初始化
        System.out
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法之小试牛刀——回型数组 的相关文章

随机推荐

  • python 环境配置测试,手工照敲线性回归实战

    lesson013 linear regression py import numpy as np error for y wx b def compute error for line given points b w points to
  • nodejs --buffer模块(三) buffer的操作和属性

    全局方法 Buffer byteLength string encoding 返回字符串实际字节的长度 Buffer compare buf1 buf2 比较两个buffer的前后顺序 等价于buffer1 compare buf2 Buf
  • 【Qt教程】2.2 - Qt5 布局管理器(水平、垂直、栅格布局)、弹簧、设计一个登陆界面

    使用布局管理器 来设计一个登陆界面 都是操作 没代码没理论 参照 Qt设计一登陆窗口布局 1 新建空工程 双击 ui文件 进入界面设计区 我们新建工程时候 使用的是QMainWindow类 会自动包含菜单栏 状态栏 在右上角对象浏览器中 我
  • TeleGram都有哪些限制?

    账户 用户名 形如 TGgeek 5 32字符 用户名 username 有什么用 一定要设置吗 如何设置 名字长度 1 64字符 姓氏长度 0 64字符 账号自毁时限 如果账号在一定时间内不上线 到时限后会自动删除账号和所有资料 删除后不
  • visual studio:未能加载文件或程序集“xxx.dll”或它的某一个依赖项

    1 没有添加库目录或附加库目录 2 如果dll内部有错误 也会提示这个
  • 内联元素的padding和margin

    内联元素的padding和margin能设置上吗 这是我前段时间面试某中厂被问到的一道面试题 一开始有点懵 但照自己的理解是这样回答的 内联元素不能通过改变宽高来改变元素大小 只能通过内部撑开 padding设置不上 margin left
  • rand()查询效率问题解决

    随机从数据表中取一条数据 我们一般会用到rand 函数 但是如果用不好的话 rand 的效率实在太低 基础使用 SELECT FROM tablename ORDER BY RAND LIMIT 1 这是最基本的rand 用法 实例测试 我
  • 史上最全,Spring Boot入门篇总结,收藏起来慢慢看

    Spring Boot是Spring家族下的一个全新开发框架 其设计目的主要是用来简化Spring应用的创建及开发过程 它提供了自动配置 starter依赖等特性 从而使开发人员从大量的XML配置中解脱出来 Spring Boot致力于在蓬
  • mysql-批量更新

    方法一 用update结合case then实现 原始SQL语句 UPDATE baginfo 2021 09 SET channel id CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5
  • 五分钟9步搞定nginx正向代理配置方法

    nginx在绝大数的场景中我们使用其用于做web中间件或反向代理使用 但是nginx实际上也提供了正向代理的功能 下面我们来进行nginx正向代理配置操作 以便大家能够掌握nginx正向代理配置方法 第一步 获取nginx正向代理模块 gi
  • 微信小程序---点餐小程序左侧滑动菜单实现

    文章目录 前言 一 初识scroll view 二 左侧导航 三 右侧滑动 前言 最近在帮亲戚做一款微信的点餐小程序 以前从没有接触过小程序的我只能现做现卖 一边看文档一边实践尝试 在进行到点菜模块左侧滑动菜单时遇到了小小的阻碍 索性在查找
  • ARM Mbed数字信号处理

    信号处理对于许多应用而言很重要 借助现代计算机的强大功能 许多信号处理功能现在都可以通过数字方式完成 本文 我们将说明如何使用Arm Mbed DSP库进行数字信号处理和控制 低通滤波器 在Arm Mbed 网站上 有关于如何设计和实现低通
  • 基于 LowCodeEngine 的低代码组件体系的建设和实践

    今天在这里和大家聊一聊前端组件 或者现在更流行的说法 物料 的话题 物料本身已经不是一个新鲜的话题了 从 06 年 jQuery 发布 前端物料就开始以各种 jQuery 插件的形式不断涌现 直到今天我们仍然可以在 github 上看到很多
  • spring IOC

    1 主要内容 2 Spring 框架 2 1 Spring 框架概念 Spring 是众多开源java项目中的一员 基于分层的javaEE应用一站式轻量级开源框架 主要核心是 IOC 控制反转 依赖注入 与 AOP 面向切面 两大技术 实现
  • BASE64加密解密问题

    BASE64加密解密问题 问题点 base64解密用base64加密的字符串 没有拿到正确的原字符串 1 原支付链接 https yimafu yeepay com ymf pay qrPay index qr 4AZZPEEO id YM
  • 计算机按键模块,计算器键盘-TM1650/AIP650

    使用TM1650 AIP650作为输入检测芯片 TM1650和AIP650在引脚和功能上完全相同 两个芯片都是可以控制4个8段数码管或者扫描4 7矩阵按键 在读取数据的协议上 两种芯片的读取时序略有不同 但在控制命令上 是大致相同的 制作这
  • JAVA JRE JDK

    JRE Java Runtime Environment JVM 核心库 运行JAVA程序 class文件 所必须的组件 如想开发编译Java程序 java文件 需安装JDK Java Development Kit 安装JDK时默认包含公
  • 3.23 vi/vim:纯文本编辑器

    vi vim 是Linux命令行界面下的文字编辑器 几乎所有的Linux系统都安装了vi 只要学会了vi这个编辑工具 就可以在任何Linux系统上使用它 而vim是vi命令的增强版 Vi IMproved 与vi编辑器完全兼容 此外还有很多
  • 远程升级单片机程序怎么设计?

    之前的文章中介绍过串口和U盘的IAP程序设计 在物联网应用中 远程IAP升级MCU的程序是一项非常有用的功能 当设备出现程序问题或者需要更新程序时 只需要在服务器上对设备进行升级 不需要在有专门的人员去现场进行升级 节省人力物力 要实现远程
  • 算法之小试牛刀——回型数组

    回型数组 今天偶然做到了这道稍稍有些难度的算法题 写一个回型数组 具体要求如下 输入一个数字n 要求输出回型数组 例如 输入3 输出 1 2 3 8 9 4 7 6 5 输入4 输出 1 2 3 4 10 11 12 5 9 8 7 6 相