算法—打印回形数

2023-11-04

题目

题目描述
回形数是一个矩阵输出,从矩阵的左上角往右开始打印数字0,遇到矩阵边界时,顺时针90方向继续打印,并数字增长1,如此类推直到把矩阵填满,输入一个整形宽和高单位,每输出一个数字,占用1单位宽高空间,根据入参打印出对应的回形数。
输入描述:
矩阵的宽高
输出描述:
回字形的矩阵
示例1
输入:8 3
输出:
00000000
34444441
22222221

分析

类似顺时针打印矩阵的思想。
还是利用“剥圈”法

  1. 四个点确定一个圈:startRow,startColum,endRow,endColumn
  2. 对于一个圈,按照“右下左上”的顺序向矩阵中添加数,换方向后,添加的数要加一
  3. 每个圈,要添加的数有个初始值,比如第一个圈的初始值是0
  4. 添加完一个圈之后,要重新定位四个点的值,继续添加下一个圈

代码

import java.util.Scanner;

public class Main{
    public static int value;//设置初始值
    public static int[][] getMatrix(int row, int column){
        int[][] matrix = new int[row][column];
        if(row==0 || column==0){
            return matrix;
        }
        value = 0; //设置value的初始值为0
        int startRow = 0;
        int startColumn = 0;
        int endRow = row-1;
        int endColumn = column-1;
        while(startRow<=endRow && startColumn<=endColumn){
            value = getMatrixByEdge(matrix, value, startRow++, startColumn++, endRow--, endColumn--);
            //先调用getMatrixByEdge()函数,该函数向matrix中填值,并返回新的value,再更新四个点的值
        }
        return matrix;
    }
    public static int getMatrixByEdge(int[][] matrix, int value, int startRow, int startColumn, int endRow, int endColumn){
        //先判断边界值
        if(startRow == endRow){ //只有一行
            for(int i=startColumn; i<=endColumn; i++){
                matrix[startRow][i] = value;
            }
        }else if(startColumn == endColumn){ //只有一列
            for(int j=startRow; j<=endRow; j++){
                matrix[j][startColumn] = value;
            }
        }else{
            //按“右下左上”的顺序,向matrix添加值
            int curRow = startRow;  //设置当前行指针
            int curColumn = startColumn;//设置当前列指针
            while(curColumn <= endColumn){ //向右
                matrix[curRow][curColumn] = value;
                curColumn++;
            }
            curColumn--; //把列指针恢复到指向最后一列
            curRow++;
            value++; //每处理完一个方向,value的值要加一
            while(curRow <= endRow){//向下
                matrix[curRow][curColumn] = value;
                curRow++;
            }
            curRow--; //把行指针恢复到指向最后一行
            curColumn--;
            value++;
            while(curColumn >= startColumn){//向左
                matrix[curRow][curColumn] = value;
                curColumn--;
            }
            curColumn++; //当前列指针恢复到指向第一列
            curRow--;
            value++;
            while(curRow > startRow){//向上,且不添加第一行了
                matrix[curRow][curColumn] = value;
                curRow--;
            }
            value++;
        }
        return value;
    }
    //测试
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int column = sc.nextInt();
        int row = sc.nextInt();
        int matrix[][] = getMatrix(row, column);
        for(int i=0; i<row; i++){
            for(int j=0; j<column; j++){
                System.out.print(matrix[i][j]);
            }
            System.out.print('\n');
        }
        sc.close();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法—打印回形数 的相关文章

  • 如何在 Spring Data 中选择不同的结果

    我在使用简单的 Spring Data 查询或 Query 或 QueryDSL 在 Spring Data 中构建查询时遇到问题 如何选择三列 研究 国家 登录 不同的行 并且查询结果将是用户对象类型的列表 Table User Id S
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 当客户端关闭连接时,Spring StreamingResponseBody 请求线程未清理

    我在控制器中有一个端点 它返回一个StreamingResponseBody 用于向客户端发送文件 其代码大致如下 RestController RequestMapping value api public class Controlle
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • c语言里如何倒序输出字符,倒序输出字符 C语言

    匿名用户 1级 2010 11 26 回答 include include void main char string1 200 用于存放输入的字符串 char string2 200 用于存放倒序后的字符串 int invertion c
  • 6.S081笔记

    Lec 01简单介绍 XV6 OS 运行在一个RISC V微处理器上 我们用QEMU模拟RISC V 从而在一个QEMU模拟器上运行XV6 Lec 03 硬件对强隔离的支持 两种方式实现了隔离性 内核态 用户态的切换 user kernel
  • 手把手带你入门github

    前言 github是一个面向开源及私有软件项目的托管平台 什么叫面向开源呢 说白了就是把代码共享 微软以前并不秉持着开源的态度 企图以windows占有率坐拥江山 可惜开源共享的大势谁都不能阻挡 哪怕是微软帝国 这不 斥资把这个国际知名代码
  • mysql修改自增字段自增起始值

    需要修改自增字段的起始值 以使其后续插入的主键id从自定义的值开始自增 先后使用了三种方法 前两种均告失败 第三种成功 1 直接在navicat里进行设置 结果可以保存但保存无效 本方法失败 2 使用 SQL 语句进行修改 SQL 执行结果
  • 系统安装部署过程

    Linux系统安装部署过程 VMware软件的使用 第一个历程进入系统引导界面进行配置 引导项说明 1 安装centos7系统 2 测试光盘镜像并安装系统 3 排错模式
  • KB: DFS 复制超过最大离线时间引起的AD同步失败

    故障描述 域内有两台DC 辅DC无法同步SYSVOL 辅DC降级后 退域 再加入域 再升级为域控制器 依然无法同步SYSVOL 使用NET SHARE命令对两台DC进行诊断 主DC结果 共享名 资源 注解 C C 默认共享 IPC
  • 【Mysql Workbench导入excel数据】

    使用Workbench导入excel表插入数据库表 导入excel表就可以快速的插入多条数据 比如需要随机生成一些假数据到数据库表的话 数量要求比较多的情况下 使用excel生成数据再导入就很快 步骤 下面来讲解怎样导入excel表数据插入
  • 微信卡券之众多坑总结(Java)---优惠券

    1 建议一个字一个字读微信文档 从头到尾 不要只看卡券那一栏 https developers weixin qq com doc offiaccount Cards and Offer Redeeming a coupon voucher
  • Go语言实现Onvif客户端:6、获取rtsp流地址

    Go语言实现Onvif客户端 6 获取rtsp流地址 文章目录 Go语言实现Onvif客户端 6 获取rtsp流地址 1 代码 2 结果 3 查看 1 代码 获取并选择Profile token后获取rtsp流地址也是调用接口即可 Desc
  • 模块化及模块化规范

    什么是模块化 将一个项目拆分为若干块 每块之间以一定的形式进行通信 而每块内部的内容都是独立的 前端没有模块化会造成什么问题 耦合性高 不利于代码维护 污染全局的命名空间 造成代码冲突 模块化的优点 减少命名冲突 功能独立 可以按需加载 大
  • 配置git环境变量

    在配置git的时候 发现没有配置环境变量 去网上查了一下资料 以下是我配置环境变量的步骤 一 找到git安装目录 我的git的默认安装目录是在 C Program Files Git 我们打开此目录下的bin文件 就可以看到如下图所示 这里
  • elementUI name is required, * is required

    先来看看问题表现 表单如下
  • 得物技术网络优化-CDN资源请求优化实践

    1 前言 为用户提供更加流畅的App使用体验是我们的目标 作为电商类App 社区 交易相关业务强依赖图片 视频 文件等静态资源 由于这些静态资源部署在CDN上 因此本文统称为 CDN资源 虽然部署到CDN服务后提升了CDN资源的请求性能 但
  • Python3 报错TypeError: string indices must be integers

    python sort 方法排序 遇到了报错 TypeError string indices must be integers 代码如下图 1 这个错误的意思是 字符串下标必须要是整数 2 当然还有另外一种情况 就是通过字典去取字段 例
  • 秋招-算法-查分与前缀和数组篇

    秋招 算法 查分与前缀和数组篇 差分数组 差分数组的主要适用场景是频繁对原始数组的某个区间的元素进行增减 1109 航班预订统计 class Solution public int corpFlightBookings int bookin
  • 为什么我选择了springcloud而不是dubbo?

    写好的代码越来越满足不了需求 因为需求总是在不断的变化 在技术选型时 实在是心有余而力不足 思来想去 就考虑了使用微服务架构来实现 功能模块化 今天主要讲讲为什么需要微服务架构 还是以故事的形式呈现 一 认识微服务 阶段一 单体服务 话说小
  • 重新理解百度智能云:写在大模型开放后的24小时

    在这些回答背后共同折射出的一个现实是 大模型不再是一个单选题 而更是一个综合题 在这个新的时代帆船上 产品 服务 安全 开放等全部都需要成为必需品 甚至是从企业的落地层面来看 这些更是刚需品 作者 皮爷 出品 产业家 过去的5个月 李亮很忙
  • 哇,ElasticSearch多字段权重排序居然可以这么玩

    背景 读者提问 ES 的权重排序有没有示列 参考参考 刚好之前也稍微接触过 于是写了这篇文章 可以简单参考下 在很多复杂的业务场景下 排序的规则会比较复杂 单一的降序 升序无法满足日常需求 不过 ES 中提供了给文档加权重的方式来排序 还是
  • python中的tkinter包的使用-Label & Button

    首先我们先建一个简单的窗口 代码 import tkinter as tk window tk Tk window title my window window geometry 200x100 窗口尺寸 l tk Label window
  • 算法—打印回形数

    题目 题目描述 回形数是一个矩阵输出 从矩阵的左上角往右开始打印数字0 遇到矩阵边界时 顺时针90方向继续打印 并数字增长1 如此类推直到把矩阵填满 输入一个整形宽和高单位 每输出一个数字 占用1单位宽高空间 根据入参打印出对应的回形数 输