这是碰到的第一个钻牛角尖的算法题,刚开始思路不停的跑偏,总想着一行或者一列之间行列号有什么关系,可是找寻好久并无规律可循
在网上看了大神们写的代码,瞬间被秒成了渣渣
思路:
先定义一个ArrayList集合,再按顺时针顺序把每一个元素加到集合中去,再遍历集合就可拿到每一个数据了
代码奉上:
1 public ArrayList<Integer> printMatrix(int [][] matrix) { 2 ArrayList<Integer> list = new ArrayList<Integer>(); 3 int left = 0; 4 int right = matrix[0].length-1; 5 int top = 0; 6 int bottom = matrix.length-1; 7 if(matrix[0].length==0||matrix.length==0){ 8 return null; 9 } 10 while(left<=right && top<=bottom){ 11 for(int i=left;i<=right;i++){ 12 list.add(matrix[top][i]); 13 } 14 for(int j=top+1;j<=bottom;j++){ 15 list.add(matrix[j][right]); 16 } 17 if(top!=bottom){ 18 for(int k=right-1;k>=left;k--){ 19 list.add(matrix[bottom][k]); 20 } 21 } 22 if(left!=right){ 23 for(int l=bottom-1;l>top;l--){ 24 list.add(matrix[l][left]); 25 } 26 } 27 28 top++;left++;bottom--;right--; 29 } 30 return list; 31 32 }
并提醒自己不要钻牛角尖不要钻牛角尖!!!!