接收数组的行数和列数,返回正序和倒序的螺旋数组

  1. package cn.baokx;
  2.  
  3. public class Test {
  4. public static void main(String[] args) {
  5. printArray(getSpiralArray(5,5,false));
  6. System.out.println("**************");
  7. printArray(getSpiralArray(5,5,true));
  8. }
  9. //返回螺旋数组
  10. public static int [][] getSpiralArray(int m,int n,boolean reverse){
  11. //定义一个长度为m*n的数组。并按顺序初始化
  12. int [] numArray = new int[m*n];
  13. for(int i = 0 ; i < numArray.length ; i++){
  14. if(!reverse){
  15. numArray[i] = (i+1);
  16. }else{
  17. numArray[i] = (numArray.length-i);
  18. }
  19. }
  20. //初始化数组下标
  21. int foot = 0;
  22.  
  23. //声明螺旋数组
  24. int[][] array = new int[m][n];
  25. //计算"层数",以m和n中较小的数为准
  26. int layer = m<n?
  27.  
  28. m:n;
  29. layer = (layer%2==1)?(layer / 2 + 1):(layer / 2);
  30.  
  31. // 从外层到里层循环
  32. for (int i = 0; i < layer; i++) {
  33. //从左到右
  34. for (int j = i; j < n - i; j++) {
  35. array[i][j] = numArray[foot++];
  36. if(foot>=m*n){
  37. return array;
  38. }
  39. }
  40. // 从上到下
  41. for (int j = i + 1; j < m - i; j++) {
  42. array[j][n - i - 1] = numArray[foot++];
  43. if(foot>=m*n){
  44. return array;
  45. }
  46. }
  47. // 从右到左
  48. for (int j = n - i - 2; j >= i; j--) {
  49. array[m - i - 1][j] = numArray[foot++];
  50. if(foot>=m*n){
  51. return array;
  52. }
  53. }
  54. // 从下到上
  55. for (int j = m - i - 2; j > i; j--) {
  56. array[j][i] = numArray[foot++];
  57. if(foot>=m*n){
  58. return array;
  59. }
  60. }
  61. }
  62. return array;
  63. }
  64. //打印二维数组
  65. public static void printArray(int [][] array){
  66. for (int i = 0; i < array.length; i++) {
  67. for (int j = 0; j < array[0].length; j++) {
  68. if(array[i][j]<10){
  69. System.out.print("0");
  70. }
  71. System.out.print(array[i][j] + " ");
  72. }
  73. System.out.println();
  74. }
  75. }
  76. }

用java实现螺旋数组的更多相关文章

  1. [leetcode]54. Spiral Matrix2生成螺旋数组

    import java.util.Arrays; /** * Created by lvhao on 2017/7/6. * Given an integer n, generate a square ...

  2. Java反射遍历数组

    日志中有时候需要查看数组中的值,但是重载很多的打印函数,觉得很别扭.所以想通过反射,获取数组中的值,打印出来.Java提供了数组反射操作的类,之前没有关注过,提供的方法简单易用. public sta ...

  3. 慕课网-安卓工程师初养成-6-3 如何使用 Java 中的数组

    来源:http://www.imooc.com/code/1525 Java 中操作数组只需要四个步骤: 1. 声明数组 语法:  或者  其中,数组名可以是任意合法的变量名,如: 2. 分配空间 简 ...

  4. Java中的数组操作进阶

    package com.mi.array; import java.util.Arrays; /** * System.arraycopy(i, 0, j, 0, i.length);这种复制会覆盖目 ...

  5. 如何使用 Java 中的数组

    Java 中操作数组只需要四个步骤: 1. 声明数组 语法:  数据类型[ ] 数组名: 或者   数据类型 数组名[ ]: 其中,数组名可以是任意合法的变量名,如: 2. 分配空间 简单地说,就是指 ...

  6. Java之组合数组1

    我们先说"数组",数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素. 一.一维数组的定义 type arrayName[]; 其中类型(type ...

  7. Java比较器对数组,集合排序一

    数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...

  8. 【转】java中byte数组与int类型的转换(两种方式)----不错

    原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...

  9. java随机数与数组的使用。

    java随机数与数组的使用.    一:题目 二 代码:  public class Students {    int number;  // 学号    int State ;   // 年级   ...

随机推荐

  1. Mybatis 中 foreach collection 的三种用法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...

  2. scrapy研究探索(二)——爬w3school.com.cn

    下午被一个问题困扰了好一阵.终于使用还有一种方式解决. 開始教程二.关于Scrapy安装.介绍等请移步至教程(一)(http://blog.csdn.net/u012150179/article/de ...

  3. VC6.0VB6.0 Scratch等软件

    VC6.0VB6.0 Scratch等软件 http://pan.baidu.com/s/1nv4hJrb

  4. 关于Blog使用

    1.网易博客http://inowtofuture.blog.163.com/blog/#m=0 使用时间:2011年8月-2012年2月 记录内容:主要记录本科參加ACM期间在POJ(北京大学OJ) ...

  5. poj1363——Rails

    Description There is a famous railway station in PopPush City. Country there is incredibly hilly. Th ...

  6. 集群节点Elasticsearch升级

    集群节点Elasticsearch升级 操作流程 1.首先执行Elasticsearch-1.2.2集群的索引数据备份 2.关闭elasticsearch-1.2.2集群的recovery.compr ...

  7. [poj3974] Palindrome 解题报告 (hash\manacher)

    题目链接:http://poj.org/problem?id=3974 题目: 多组询问,每组给出一个字符串,求该字符串最长回文串的长度 数据范围支持$O(nlog n)$ 解法一: 二分+hash ...

  8. xBIM 基础14 使用LINQ实现最佳性能(优化查询)

    系列目录    [已更新最新开发文章,点击查看详细]  LINQ代表语言集成查询,它是3.5版以来的.NET Framework的一部分.它实现延迟执行,这意味着您可以链接查询语句,并且在您实际迭代结 ...

  9. POJ 2184 DP

    思路: f[j]表示当ts的和为j的时候tf的最大值. 这时候要分情况讨论: (我把状态平移了101000) 若ts[i]>=0倒序循环 否则正序 (防止ts被用了多次) f[101000]=0 ...

  10. javax.validation参数校验

    在实体字段加注解: /** * 机构名称 */ @ApiParam(name = "orgName", value = "机构名称") @Size(max = ...