螺旋类
- package entity;
- /**
- * 打印数组螺旋值类
- */
- public class Spiral {
- // 数组行
- private int row;
- // 数组列
- private int col;
- // 行列数
- private int size;
- // 当前行索引
- private int rowIndex;
- // 当前列索引
- private int colIndex;
- // 行开始索引
- private int rowStart;
- // 行结束索引
- private int rowEnd;
- // 列开始索引
- private int colStart;
- // 列结束索引
- private int colEnd;
- // 数组
- private int[][] spiralArray;
- // 保存数组
- private int[][] saveArray;
- // 构造方法
- public Spiral(int row,int col,int[][] spiralArray) {
- this.row = row;
- this.col = col;
- this.rowStart = 0;
- this.rowEnd = row - 1;
- this.colStart = 0;
- this.colEnd = col - 1;
- this.size = row*col;
- this.spiralArray = spiralArray;
- this.saveArray = new int[row][col];
- for(int[] r : this.saveArray) {
- for(int i=0;i
- r[i] = Integer.MIN_VALUE;
- }
- }
- }
- // 打印螺旋值
- public void printSpiral() {
- // 行列1时打印螺旋值
- if(this.row==1||this.col==1) {
- printArray();
- return;
- }
- while(size-->0) {
- printData();
- saveData();
- setRange();
- if(this.rowIndex==this.rowStart&&this.colIndex<this.colEnd) {
- toRight();
- }else if(this.rowIndex<this.rowEnd&&this.colIndex==this.colEnd) {
- toDown();
- }else if(this.rowIndex==this.rowEnd&&this.colIndex>this.colStart) {
- toLeft();
- }else if(this.rowIndex>this.rowStart&&this.colIndex==this.colStart) {
- toUp();
- }
- }
- }
- // 设置行列开始结束值
- private void setRange() {
- // 开始结束值的界分
- int rowDivide = this.row/2;
- int colDivide = this.col/2;
- // 判断一行每个元素是否都走完
- for(int i=0;i<this.row;i++) {
- int colCount = 0;
- int[] r = this.saveArray[i];
- for(int j=0;j<this.col;j++) {
- int c = r[j];
- if(c!=Integer.MIN_VALUE) {
- ++colCount;
- }
- }
- if(colCount==this.col) {
- if(i+1
this.rowStart = i + 1; - if(i-1>=rowDivide) this.rowEnd = i - 1;
- }
- }
- // 判断列元素是否走完
- for(int i=0;i<this.col;i++) {
- int rowCount = 0;
- for(int j=0;j<this.row;j++) {
- int data = this.saveArray[j][i];
- if(data!=Integer.MIN_VALUE) {
- ++rowCount;
- }
- }
- if(rowCount==this.row) {
- if(i+1
this.colStart = i + 1; - if(i-1>=colDivide) this.colEnd = i - 1;
- }
- }
- }
-
- // 打印数组
- private void printArray() {
- for(int[] arr : this.spiralArray) {
- for(int data : arr) {
- System.out.print(data);
- }
- }
- }
- // 打印元素
- private void printData() {
- System.out.print(this.spiralArray[this.rowIndex][this.colIndex]);
- }
- // 向上移动
- private void toUp() {
- this.rowIndex = (this.rowIndex-1)>=0?--this.rowIndex:0;
- }
- // 向下移动
- private void toDown() {
- this.rowIndex = (this.rowIndex+1)<this.row?++this.rowIndex:this.row-1;
- }
- // 向左移动
- private void toLeft() {
- this.colIndex = (this.colIndex-1)>=0?--this.colIndex:0;
- }
- // 向右移动
- private void toRight() {
- this.colIndex = (this.colIndex+1)<this.col?++this.colIndex:this.col-1;
- }
- // 保存已经过数据
- private void saveData() {
- this.saveArray[this.rowIndex][this.colIndex] = this.spiralArray[this.rowIndex][this.colIndex];
- }
- }
测试类
- package test;
-
- import java.util.Arrays;
-
- import entity.Spiral;
-
- public class SpiralTest {
-
- public static void main(String[] args) {
- // int row = 1;
- // int col = 1;
- // int[][] array = {{1}};
- // int row = 1;
- // int col = 2;
- // int[][] array = {{1,2}};
- // int row = 2;
- // int col = 1;
- // int[][] array = {{1},{2}};
- int row = 4;
- int col = 5;
- int[][] array = new int[row][col];
- for(int[] r : array) {
- for(int i=0;i
- r[i] = (int)(Math.random()*100);
- }
- }
- System.out.println(Arrays.deepToString(array));
- Spiral sp = new Spiral(row,col,array);
- sp.printSpiral();
- }
-
- }
-
相关阅读:
数据结构与算法之美代码:排序算法3
数据结构——动态顺序表
分布式的在线教育系统的实现与应用
网络-网络状态&网络速度
spring实战笔记
文举论金:黄金原油全面走势分析策略独家指导
shell脚本按日期范围和间隔下载数据
用低代码打造CRM系统 实现客户个性化管理
使用AOP切面的环绕通知,接口没有返回值
MySQL笔记:MySQL求最近一段时间
-
原文地址:https://blog.csdn.net/humors221/article/details/133577973