博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
螺旋矩阵打印java实现
阅读量:6671 次
发布时间:2019-06-25

本文共 1570 字,大约阅读时间需要 5 分钟。

hot3.png

 

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

  For example,
  Given the following matrix:

[

[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]

 

 

打印值:1236

题目意思:

给定一个m*n的矩阵,输出所有元素的螺旋顺序。

解题思路:

使用计算输出的方法,先处理上面一行,再处理右面一行,再处理下面一行,再处理左边一i列,这是一个处理流程,一直这样操作,直到所有的元素都处理完成。

实现过程

public List<Integer> spiralOrder(int[][] matrix) {

  List<Integer> result = new ArrayList<>(50);
  if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
   return result;
  }

  // 只有一行的情况

  if (matrix.length == 1) {
   for (int i : matrix[0]) {
    result.add(i);
   }
   return result;
  }
  if (matrix[0].length == 1) {
   for (int i = 0; i < matrix.length; i++) {
    result.add(matrix[i][0]);
   }
   return result;
  }

  // 计算有多少圈

  int row = matrix.length;
  int col = matrix[0].length;
  int cycle = row < col ? row : col;
  cycle = (cycle + 1) / 2;
  int round = 0;
  int left = 0;
  int right = matrix[0].length - 1;
  int top = 0;
  int down = matrix.length - 1;
  // 总元素个数
  int total = col * row;
  int count = 0;
  while (round < cycle) {
   // 上面一行
   for (int i = left; i <= right && count < total; i++) {
    count++;
    result.add(matrix[round][i]);
   }

   top++;

   // 右边一列
   for (int i = top; i <= down && count < total; i++) {
    count++;
    result.add(matrix[i][col - round - 1]);

   }

   right--;

   // 底下一行

   for (int i = right; i >= left && count < total; i--) {
    count++;
    result.add(matrix[row - round - 1][i]);
   }
   down--;
   // 左边一列
   for (int i = down; i >= top && count < total; i--) {
    count++;
    result.add(matrix[i][round]);
   }
   left++;
   round++;
  }
  return result;

 }

 

参考文章:欢迎转载,转载请注明出处【】

 

 

 

转载于:https://my.oschina.net/iioschina/blog/1525606

你可能感兴趣的文章
跨进程通信,到底用长连接还是短连接
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
举重若轻的人人车移动端数据平台
查看>>
专访《Haskell函数式编程入门》作者张淞:浅谈Haskell的优点与启发
查看>>
Git 2.7: 一个新的带来许多新特性和性能提升的主要版本
查看>>
jDays 2016综合报道
查看>>
大规模学习该如何权衡得失?解读NeurIPS 2018时间检验奖获奖论文
查看>>
解读2015之Spark篇:新生态系统的形成
查看>>
Node和JS基金会宣布合并为 OpenJS 基金会
查看>>
编转码、CDN和AI是如何撑起短视频数百亿市场规模的
查看>>
取代Python多进程!伯克利开源分布式框架Ray
查看>>
如何对DevOps数据库进行源代码控制
查看>>
虚拟主播上线:多模态将改变人机交互的未来
查看>>
Hyperledger Grid:一个用于分布式供应链解决方案的框架
查看>>
.NET或将引入类型类和扩展
查看>>
区块链现状:从谨慎和批判性思维看待它(第二部分)
查看>>
GitHub 重磅更新:无限私有仓库免费使用
查看>>
AlphaZero进化论:从零开始,制霸所有棋类游戏
查看>>
Swift 5进入发布倒计时
查看>>
Git 2.18版本已支持Git协议v2
查看>>