LeetCode-54.Spiral Matrix
2017-06-03 09:36
573 查看
一、问题描述
给定一个m*n的矩阵,返回从[0,0]开始的矩阵螺旋列表。例如给定矩阵[ [1,2,3],[4,5,6],[7,8,9] ],返回列表内容为[1,2,3,6,9,8,7,4,5].
二、解题思路
两次循环,内层循环分别按照从左往右,从上到下,从右往左,从下到上的顺序添加到列表,外层循环则控制不断重复这四个内层循环,直到条件不满足退出循环。设置边界数组board,board[0]存储上边界,board[1]存储下边界,board[2]存储左边界,board[3]存储有边界。i,j分别表示当前位置元素的横纵坐标。
例如从左往右添加元素时,当j==board[3]-1时,此时已经到了最右边的元素,添加完钙元素后需要将i++,跳出当前内层循环,开始从上到下循环。
三、代码
public class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> result=new ArrayList<Integer>(); if(matrix==null || matrix.length==0) return result; int[] board=new int[4]; board[0]=-1; board[1]=matrix.length; board[2]=-1; board[3]=matrix[0].length; int i=0; int j=0; while((true)){ while(j<board[3]){ if(j==board[3]-1){ result.add(matrix[i][j]); board[0]=board[0]+1;//上边界 i++; break; } result.add(matrix[i][j]); j++; } //因为退出循环前执行了i++,如果i超出边界,跳出外层循环。 if(i>=board[1]) break; while(i<board[1]){ if(i==board[1]-1){ result.add(matrix[i][j]); board[3]=board[3]-1;//有边界 j--; break; } result.add(matrix[i][j]); i++; } if(j<=board[2]) break; while(j>board[2]){ if(j==board[2]+1){ result.add(matrix[i][j]); board[1]=board[1]-1;//下边界 i--; break; } result.add(matrix[i][j]); j--; } if(i<=board[0]) break; while(i>board[0]){ if(i==board[0]+1){ result.add(matrix[i][j]); board[2]=board[2]+1;//左边界 j++; break; } result.add(matrix[i][j]); i--; } if(j>=board[3]) break; } return result; } }
相关文章推荐
- Leetcode-54. Spiral Matrix
- leetcode - 54. Spiral Matrix
- leetcode 54. Spiral Matrix
- (java)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_OJ【54】Spiral Matrix
- Leetcode 54. Spiral Matrix
- leetcode 54. Spiral Matrix
- leetcode.array--54. Spiral Matrix
- 【leetcode】【54】Spiral Matrix
- 面试题20:顺时针打印矩阵(Leetcode-54和57)
- 54. Spiral Matrix
- LeetCode 54. Spiral Matrix(螺旋矩阵Ⅰ)
- leetcode(54).206. Reverse Linked List
- 54. Spiral Matrix