• JAVA编程题-求矩阵螺旋值


    螺旋类

    1. package entity;
    2. /**
    3. * 打印数组螺旋值类
    4. */
    5. public class Spiral {
    6. // 数组行
    7. private int row;
    8. // 数组列
    9. private int col;
    10. // 行列数
    11. private int size;
    12. // 当前行索引
    13. private int rowIndex;
    14. // 当前列索引
    15. private int colIndex;
    16. // 行开始索引
    17. private int rowStart;
    18. // 行结束索引
    19. private int rowEnd;
    20. // 列开始索引
    21. private int colStart;
    22. // 列结束索引
    23. private int colEnd;
    24. // 数组
    25. private int[][] spiralArray;
    26. // 保存数组
    27. private int[][] saveArray;
    28. // 构造方法
    29. public Spiral(int row,int col,int[][] spiralArray) {
    30. this.row = row;
    31. this.col = col;
    32. this.rowStart = 0;
    33. this.rowEnd = row - 1;
    34. this.colStart = 0;
    35. this.colEnd = col - 1;
    36. this.size = row*col;
    37. this.spiralArray = spiralArray;
    38. this.saveArray = new int[row][col];
    39. for(int[] r : this.saveArray) {
    40. for(int i=0;i
    41. r[i] = Integer.MIN_VALUE;
    42. }
    43. }
    44. }
    45. // 打印螺旋值
    46. public void printSpiral() {
    47. // 行列1时打印螺旋值
    48. if(this.row==1||this.col==1) {
    49. printArray();
    50. return;
    51. }
    52. while(size-->0) {
    53. printData();
    54. saveData();
    55. setRange();
    56. if(this.rowIndex==this.rowStart&&this.colIndex<this.colEnd) {
    57. toRight();
    58. }else if(this.rowIndex<this.rowEnd&&this.colIndex==this.colEnd) {
    59. toDown();
    60. }else if(this.rowIndex==this.rowEnd&&this.colIndex>this.colStart) {
    61. toLeft();
    62. }else if(this.rowIndex>this.rowStart&&this.colIndex==this.colStart) {
    63. toUp();
    64. }
    65. }
    66. }
    67. // 设置行列开始结束值
    68. private void setRange() {
    69. // 开始结束值的界分
    70. int rowDivide = this.row/2;
    71. int colDivide = this.col/2;
    72. // 判断一行每个元素是否都走完
    73. for(int i=0;i<this.row;i++) {
    74. int colCount = 0;
    75. int[] r = this.saveArray[i];
    76. for(int j=0;j<this.col;j++) {
    77. int c = r[j];
    78. if(c!=Integer.MIN_VALUE) {
    79. ++colCount;
    80. }
    81. }
    82. if(colCount==this.col) {
    83. if(i+1this.rowStart = i + 1;
    84. if(i-1>=rowDivide) this.rowEnd = i - 1;
    85. }
    86. }
    87. // 判断列元素是否走完
    88. for(int i=0;i<this.col;i++) {
    89. int rowCount = 0;
    90. for(int j=0;j<this.row;j++) {
    91. int data = this.saveArray[j][i];
    92. if(data!=Integer.MIN_VALUE) {
    93. ++rowCount;
    94. }
    95. }
    96. if(rowCount==this.row) {
    97. if(i+1this.colStart = i + 1;
    98. if(i-1>=colDivide) this.colEnd = i - 1;
    99. }
    100. }
    101. }
    102. // 打印数组
    103. private void printArray() {
    104. for(int[] arr : this.spiralArray) {
    105. for(int data : arr) {
    106. System.out.print(data);
    107. }
    108. }
    109. }
    110. // 打印元素
    111. private void printData() {
    112. System.out.print(this.spiralArray[this.rowIndex][this.colIndex]);
    113. }
    114. // 向上移动
    115. private void toUp() {
    116. this.rowIndex = (this.rowIndex-1)>=0?--this.rowIndex:0;
    117. }
    118. // 向下移动
    119. private void toDown() {
    120. this.rowIndex = (this.rowIndex+1)<this.row?++this.rowIndex:this.row-1;
    121. }
    122. // 向左移动
    123. private void toLeft() {
    124. this.colIndex = (this.colIndex-1)>=0?--this.colIndex:0;
    125. }
    126. // 向右移动
    127. private void toRight() {
    128. this.colIndex = (this.colIndex+1)<this.col?++this.colIndex:this.col-1;
    129. }
    130. // 保存已经过数据
    131. private void saveData() {
    132. this.saveArray[this.rowIndex][this.colIndex] = this.spiralArray[this.rowIndex][this.colIndex];
    133. }
    134. }

    测试类

    1. package test;
    2. import java.util.Arrays;
    3. import entity.Spiral;
    4. public class SpiralTest {
    5. public static void main(String[] args) {
    6. // int row = 1;
    7. // int col = 1;
    8. // int[][] array = {{1}};
    9. // int row = 1;
    10. // int col = 2;
    11. // int[][] array = {{1,2}};
    12. // int row = 2;
    13. // int col = 1;
    14. // int[][] array = {{1},{2}};
    15. int row = 4;
    16. int col = 5;
    17. int[][] array = new int[row][col];
    18. for(int[] r : array) {
    19. for(int i=0;i
    20. r[i] = (int)(Math.random()*100);
    21. }
    22. }
    23. System.out.println(Arrays.deepToString(array));
    24. Spiral sp = new Spiral(row,col,array);
    25. sp.printSpiral();
    26. }
    27. }

  • 相关阅读:
    数据结构与算法之美代码:排序算法3
    数据结构——动态顺序表
    分布式的在线教育系统的实现与应用
    网络-网络状态&网络速度
    spring实战笔记
    文举论金:黄金原油全面走势分析策略独家指导
    shell脚本按日期范围和间隔下载数据
    用低代码打造CRM系统 实现客户个性化管理
    使用AOP切面的环绕通知,接口没有返回值
    MySQL笔记:MySQL求最近一段时间
  • 原文地址:https://blog.csdn.net/humors221/article/details/133577973