一个算法题实现回旋转圈矩阵
实现回旋转圈矩阵,比如输入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
一个算法题实现回旋转圈矩阵相关推荐
- C1模拟试卷的一个算法题
C1模拟试卷的一个算法题 题目: 使用Math生成一个随机数,这个随机数需要在0到500之间. 然后,在网页中打印出来从10到这个随机数的回文数. 代码实现: <!DOCTYPE html> ...
- 2015阿里秋招当中一个算法题(经典)
写一个函数,输入一个二叉树,树中每一个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值.请注意程序效率 这是2015阿里秋招的一个在线笔试题 实现方法非常easy.遍历一遍二 ...
- 算法题_遍历三角矩阵
思路:我们可以使用模拟的方法进行路径遍历. 接下来我们用C++进行编程: class Solution {private:static constexpr int directions[3][2] = ...
- 【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
- 算法题:实现一个IP白名单过滤器
最近看到一则招聘的JD,附了一个算法题的链接,原题如下: 请实现一个IP白名单过滤算法,实现以下接口boolean addWhiteIpAddress(String ip);boolean isWhi ...
- 挑战坚持每天写算法题一个月
目录 前言 2021-10-8 题目 合并两个有序数组 解题思路 代码 其他思路 2021-10-9 题目 数组中的重复数字 二维数组中的查找 解题思路 数组中的重复数字 二维数组中的查找 代码 总结 ...
- 算法题:I am a student. 转为 student. a am I
2019独角兽企业重金招聘Python工程师标准>>> public class WordsReverse {public static void main(String[] arg ...
- 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
[例5.1] 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点.试编写一个算法,找出A中的所有鞍点. 算法如下: void saddl ...
- 算法—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 ...
最新文章
- vista——最恰当的中文译名应该是“喂死它”
- PHP和ajax详解
- Wireshark网卡抓包工具简明教程
- java调用c dll,指针参数和结构体参数搞定
- 新计算 新网络 新旗舰:华为云C6实例首测
- 35岁老半路程序员的Python从0开始之路
- ​50 年来最具影响力的十大编程语言!
- android ndk r10d.rar,[Android] 环境配置之Android Studio开发NDK
- 移动端证件识别OCR
- 文本整理器 v3.0 官方
- 服务器虚拟机怎么安装win7系统教程,虚拟机怎么安装系统?VMware虚拟机安装Win7和win10图文详细教程...
- 前端实现很哇塞的端扫码功能
- tinyint(1)和int(1)的区别
- 文字检测定位--SAST
- win10 uwp 如何让WebView标识win10手机
- 机器学习基础、sklearn数据集、转换器与预估器
- WEB前端网页设计-Bootstrap 按钮下拉菜单
- 基于matlab的医学成像技术滤波反投影仿真,包括直接反投影,S-L滤波,R-L滤波,Lewitt滤波
- activiti 7 生成流程图图片
- 开源是容器安全面临的最大挑战?|Anchore 软件供应链安全报告解读
热门文章
- 软件的黑盒白盒测试,软件测试黑盒白盒测试用例
- Java简单的用户登录界面+MySQL
- 等保三级合规要求:HTTPS安全加密将势在必行
- ubuntu 极点五笔/万能五笔 for ibus
- Dubbo限制大数据传输的解决方案
- Homogeneous and Heterogeneous Relational Graph for Visible-infrared Person Re-identification——基线结果很好
- 金万维云备份在网络大环境下为您的商超核心数据保驾护航
- easypoi导出csv文件,wps打开正常,excel2016打开乱码解决方案
- Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取
- word 2003 发送错误报告