Spiral Matrix

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 ]
]

You should return [1,2,3,6,9,8,7,4,5].

这道题用的递归的思想,将最外面一层添加到result列表中,然后将剩下元素作为一个数组,做下一次递归,感觉有点土,晚点去搜点高大上的

 import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; //class ListNode {
// public int val;
// public ListNode next;
// ListNode(int x) {
// val = x;
// next = null;
// }
// } public class Solution {
List<Integer> result = new ArrayList<Integer>(); public List<Integer> spiralOrder(int[][] matrix) {
if(null == matrix || matrix.length == 0)
return result; else if(matrix.length == 1 && matrix[0].length == 1) //只有一个元素直接添加
result.add(matrix[0][0]);
else if(matrix[0].length == 1){ //竖条
for(int i = 0; i < matrix.length; i++){
result.add(matrix[i][0]); //直接添加
}
}
else if(matrix.length == 1){ //横条
for(int i = 0; i < matrix[0].length; i++){
result.add(matrix[0][i]);
}
}
else {
for(int i = 0; i < matrix[0].length; i++){ //添加第一排
result.add(matrix[0][i]);
}
for(int i = 1; i < matrix.length; i++){ //添加最后一竖
result.add(matrix[i][matrix[0].length - 1]);
}
for(int i = matrix[0].length - 2; i >= 0; i--){ //添加最后一排
result.add(matrix[matrix.length - 1][i]);
}
for(int i = matrix.length - 2; i >= 1;i--){ //添加第一排
result.add(matrix[i][0]);
}
if(matrix.length - 2 != 0 && matrix[0].length - 2 != 0){
int next[][] = new int[matrix.length - 2][matrix[0].length - 2];
for(int i = 1; i < matrix.length - 1; i++){
for(int j = 1; j < matrix[0].length - 1;j++){
next[i - 1][j - 1] = matrix[i][j];
}
}
spiralOrder(next); //递归求解下一个矩阵的值
} } return result;
}
}

最新文章

  1. 嵌入式Linux驱动学习之路(二十三)NAND FLASH驱动程序
  2. extJS起步
  3. C语言scanf函数详细解释
  4. SVN 树冲突的解决方法(Ubuntu 环境)
  5. python异常类型
  6. codeforces #313 div1 D
  7. MarkDown 格式生产类型
  8. jTemplates——学习(1)
  9. 利用git下载skia库
  10. webpack2+node+react+babel实现热加载(hmr)
  11. [Swift]LeetCode766. 托普利茨矩阵 | Toeplitz Matrix
  12. Linux内存管理 (7)VMA操作
  13. Filebeat工作原理
  14. linux系统安装mysql详细配置
  15. 103. Binary Tree Zigzag Level Order Traversal (Tree, Queue; BFS)
  16. KVM -&gt; 虚拟化简介&amp;虚拟机安装_01
  17. redis配置文件相关
  18. java-基础-【二】内部类与静态内部类
  19. 【LOJ121】「离线可过」动态图连通性
  20. 【OpenCV】SIFT原理与源码分析:关键点搜索与定位

热门文章

  1. Linq To Csv 实例简说
  2. Android开发的十项注意
  3. RC4 加密算法asp版
  4. jQuery中的选择器&lt;思维导图&gt;
  5. vim 高级使用技巧
  6. Cisco模拟器使用和静态路由配置
  7. Android数据库之SQLite数据库
  8. Spring中Quartz的配置
  9. 应该始终以PreparedStatement代替Statement
  10. C 【block类型全方位详解】