54. 螺旋矩阵
//感想:1.这道题写了蛮久的,之前在牛客上也刷过,我记得还差不多a了,思路当时基本写出来了,结果这次遇见了,写了好久都没搞定,现在也算是
a了,遇见这种需要仔细考虑边界条件。
2.这边主要是这个循环次数的计算,我上次好像根本就没有算这个东西,就把这题解出来了,
这个循环次数等于time=min(m,n)+1/2,m,n分别是行列的数目。
3.然后在取点巧,直接弄点简单的,用一个visited数组记录走过的位置,这样就不怕遇见重复了,剩下的就简单了,随便暴力横竖走就可以了。。。
4。
1 class Solution { 2 public List<Integer> spiralOrder(int[][] matrix) { 3 List<Integer> res=new ArrayList<Integer>(); 4 if(matrix==null||matrix.length==0) 5 return res; 6 7 int m = matrix.length; 8 9 int n = matrix[0].length; 10 int visited[][] = new int[m][n]; 11 int min,time=0; 12 if(m>n) min=n; 13 else min=m; 14 if(min%2==0) time=min/2; 15 else time=min/2+1; 16 17 for(int i=0;i<time;i++) 18 { 19 for(int j=i;j<n-i;j++) 20 { 21 if(visited[i][j]!=1) 22 { 23 res.add(matrix[i][j]); 24 visited[i][j]=1; 25 } 26 27 } 28 29 for(int j=i;j<m-i;j++) 30 { 31 if(visited[j][n-1-i]!=1) 32 { 33 visited[j][n-1-i]=1; 34 res.add(matrix[j][n-1-i]); 35 } 36 37 } 38 39 for(int j=n-1-i;j>=i;j--) 40 { 41 if(visited[m-1-i][j]!=1) 42 { 43 visited[m-1-i][j]=1; 44 res.add(matrix[m-1-i][j]); 45 } 46 47 } 48 49 for(int j=m-i-1;j>=i;j--) 50 { 51 if(visited[j][i]!=1) 52 { 53 visited[j][i]=1; 54 res.add(matrix[j][i]); 55 } 56 57 } 58 59 60 } 61 62 63 return res; 64 65 66 } 67 }
还有一点:今天这个visit单词,我竟然拼错了,感觉英语还要上点心,好久都没学过英语了,自从大一四级没过,然后学了一会,顺便把六级也过了以后,好像就再也没学过英语了,我记得当时我背了好多单词,每天睡觉之前刷那个百词斩,可惜我后来发现我又不考研我背这个干嘛。。。我就没看过了差不多得有一年了把。。
说多了,下面是代码: