实现回旋转圈矩阵,比如输入3,从中心开始转圈输出如下图所示

int i=3;
7   8   9
6   1   2
5   4   3
  • 思路
    方案一:先确定起始点位,然后顺时针按步走,如果下一步的点位有值就保持原来的前进方向走一步。
    方案二:先确定最终点位,然后逆时针按步走,如果到达边界就转换方向。
public class CircleMatrix {// 回旋转圈矩阵public static void main(String[] args){int x = 5;// 初始化x乘x矩阵,点位初始值为0int[][] matrix = new int[x][x];// 初始化,i,j是坐标点位;z表示上一步前进的方向;value是点位上的值int i=0,j=0,z=0, value=1;// 确定起始点位,奇偶数的起始点位不同if (isOddNumber(x)){i = ((int) x/2)+1-1;} else {i = (int) x/2-1;}j=i;// 遍历每一个点位for (int n=0; n<x*x; n++){matrix[i][j] = value;if (z == 0){j++;z=1;} else if (z == 1){// 如果前面向右走,现在应该向下走,向下点位有值就继续向右走if (i+1 < x && matrix[i+1][j] == 0){i++;z=2;} else {j++;}} else if (z == 2){// 如果前面向下走,现在应该向左走,向左点位有值就继续向下走if (j-1 >=0 && matrix[i][j-1] == 0){j--;z=3;} else {i++;}} else if (z == 3){// 如果前面向左走,现在应该向上走,向上点位有值就继续向左走if (i-1 >=0 && matrix[i-1][j] == 0){i--;z=4;} else {j--;}} else if (z == 4){// 如果前面向上走,现在应该向右走,向右点位有值就继续向上走if (j+1 < x && matrix[i][j+1] == 0){j++;z=1;} else {i--;}}// 矩阵计数点位值加1value++;}// 输出结果for (int[] rows:matrix) {for (int v:rows) {System.out.print(v + "\t");}System.out.println();}}// 判断数值i是否是奇数,i小于0时返回falsepublic static boolean isOddNumber(int i){if (i<0) {throw new RuntimeException("参数不符合规范");}return i%2 == 1;}}
int i=4;
7   8   9   10
6   1   2   11
5   4   3   12
16  15  14  13  int i=5;
21  22  23  24  25
20  7   8   9   10
19  6   1   2   11
18  5   4   3   12
17  16  15  14  13

一个算法题实现回旋转圈矩阵相关推荐

  1. C1模拟试卷的一个算法题

    C1模拟试卷的一个算法题 题目: 使用Math生成一个随机数,这个随机数需要在0到500之间. 然后,在网页中打印出来从10到这个随机数的回文数. 代码实现: <!DOCTYPE html> ...

  2. 2015阿里秋招当中一个算法题(经典)

    写一个函数,输入一个二叉树,树中每一个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值.请注意程序效率 这是2015阿里秋招的一个在线笔试题 实现方法非常easy.遍历一遍二 ...

  3. 算法题_遍历三角矩阵

    思路:我们可以使用模拟的方法进行路径遍历. 接下来我们用C++进行编程: class Solution {private:static constexpr int directions[3][2] = ...

  4. 【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆

  5. 算法题:实现一个IP白名单过滤器

    最近看到一则招聘的JD,附了一个算法题的链接,原题如下: 请实现一个IP白名单过滤算法,实现以下接口boolean addWhiteIpAddress(String ip);boolean isWhi ...

  6. 挑战坚持每天写算法题一个月

    目录 前言 2021-10-8 题目 合并两个有序数组 解题思路 代码 其他思路 2021-10-9 题目 数组中的重复数字 二维数组中的查找 解题思路 数组中的重复数字 二维数组中的查找 代码 总结 ...

  7. 算法题:I am a student. 转为 student. a am I

    2019独角兽企业重金招聘Python工程师标准>>> public class WordsReverse {public static void main(String[] arg ...

  8. 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。

    [例5.1] 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点.试编写一个算法,找出A中的所有鞍点. 算法如下: void saddl ...

  9. 算法—2,记一个自己的算法题 计算数字k在0到n中的出现的次数,k可能是0~9的一个值

    3 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1 ...

最新文章

  1. vista——最恰当的中文译名应该是“喂死它”
  2. PHP和ajax详解
  3. Wireshark网卡抓包工具简明教程
  4. java调用c dll,指针参数和结构体参数搞定
  5. 新计算 新网络 新旗舰:华为云C6实例首测
  6. 35岁老半路程序员的Python从0开始之路
  7. ​50 年来最具影响力的十大编程语言!
  8. android ndk r10d.rar,[Android] 环境配置之Android Studio开发NDK
  9. 移动端证件识别OCR
  10. 文本整理器 v3.0 官方
  11. 服务器虚拟机怎么安装win7系统教程,虚拟机怎么安装系统?VMware虚拟机安装Win7和win10图文详细教程...
  12. 前端实现很哇塞的端扫码功能
  13. tinyint(1)和int(1)的区别
  14. 文字检测定位--SAST
  15. win10 uwp 如何让WebView标识win10手机
  16. 机器学习基础、sklearn数据集、转换器与预估器
  17. WEB前端网页设计-Bootstrap 按钮下拉菜单
  18. 基于matlab的医学成像技术滤波反投影仿真,包括直接反投影,S-L滤波,R-L滤波,Lewitt滤波
  19. activiti 7 生成流程图图片
  20. 开源是容器安全面临的最大挑战?|Anchore 软件供应链安全报告解读

热门文章

  1. 软件的黑盒白盒测试,软件测试黑盒白盒测试用例
  2. Java简单的用户登录界面+MySQL
  3. 等保三级合规要求:HTTPS安全加密将势在必行
  4. ubuntu 极点五笔/万能五笔 for ibus
  5. Dubbo限制大数据传输的解决方案
  6. Homogeneous and Heterogeneous Relational Graph for Visible-infrared Person Re-identification——基线结果很好
  7. 金万维云备份在网络大环境下为您的商超核心数据保驾护航
  8. easypoi导出csv文件,wps打开正常,excel2016打开乱码解决方案
  9. Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取
  10. word 2003 发送错误报告