LeetCode--54. Spiral Matrix
来源:互联网 发布:硬座火车座位图片知乎 编辑:程序博客网 时间:2024/05/16 17:55
Problem:
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].Subscribe to see which companies asked this question
Analysis:
题目理解: 将一维或二维数组中的元素按顺时针放向进行打印;解题分析: 1. 模拟; 2. 递归: 1)每次重新计算最开始的左上初始点; 2)然后依此遍历最上一行,最右一列,最后一行,以及最左一行; 3)注意避免重复遍历,处理好边界问题;
Answer:
递归解法:
public class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> list = new ArrayList<Integer>(); if(matrix.length==0 || matrix[0].length==0) return list; int m = matrix.length, n = matrix[0].length; spiral_print(0,m-1,0,n-1,matrix,list); return list; } public static void spiral_print(int row_start,int row_end,int col_start,int col_end,int[][] matrix,List<Integer> list){ if (row_start>row_end || col_start>col_end) return; for(int i=col_start;i<=col_end;i++){ list.add(matrix[row_start][i]); } if(row_start+1>row_end) return; for(int i=row_start+1;i<=row_end;i++){ list.add(matrix[i][col_end]); } if(col_start+1>col_end) return; for(int i=col_end-1;i>=col_start;i--){ list.add(matrix[row_end][i]); } for(int i=row_end-1;i>row_start;i--){ list.add(matrix[i][col_start]); } spiral_print(row_start+1,row_end-1,col_start+1,col_end-1,matrix,list); }}
迭代解法:
public class Solution {public List<Integer> spiralOrder(int[][] matrix) { List<Integer> result = new ArrayList<Integer>(); if(matrix.length == 0) return result; int left=0,right=matrix[0].length-1,top=0,bottom=matrix.length-1,direction=0; while(left <= right && top <= bottom){ if(direction == 0){ for(int i=left;i<= right;i++){ result.add(matrix[top][i]); } top++; } else if(direction == 1){ for(int i=top;i<=bottom;i++){ result.add(matrix[i][right]); } right--; } else if(direction == 2){ for(int i=right;i>=left;i--){ result.add(matrix[bottom][i]); } bottom--; } else if(direction == 3){ for(int i=bottom;i>=top;i--){ result.add(matrix[i][left]); } left++; } direction=(direction+1) % 4; } return result;}}
0 0
- LeetCode 54. Spiral Matrix
- [LeetCode]54.Spiral Matrix
- LeetCode --- 54. Spiral Matrix
- [Leetcode] 54. Spiral Matrix
- [leetcode] 54.Spiral Matrix
- Leetcode-54.Spiral Matrix
- **LeetCode 54. Spiral Matrix
- Leetcode 54. Spiral Matrix
- [leetcode] 54. Spiral Matrix
- leetcode 54. Spiral Matrix
- 54. Spiral Matrix LeetCode
- leetcode 54. Spiral Matrix
- LeetCode *** 54. Spiral Matrix
- [LeetCode]54. Spiral Matrix
- LeetCode 54. Spiral Matrix
- LeetCode--54. Spiral Matrix
- LeetCode - 54. Spiral Matrix
- [Leetcode]54. Spiral Matrix
- 关于函数的指针传递
- java中的运算符
- 【leetcode】Median of Two Sorted Arrays
- iOS tableViewCell 点击后没有任何变化
- 剑指offer:正则表达式匹配
- LeetCode--54. Spiral Matrix
- hive安装配置
- 1879: 蛤玮买好了礼物 郑轻第八届程序设计大赛
- Java中弱引用、软引用、虚引用及强引用的区别
- nil,Nil,NULL的区别
- 怎么添加项目到SVN上面
- Android客户端发送Get和Post请求
- IOS开发通知与消息机制
- Leetcode 65. Valid Number