54.螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
思路:
- 遍历顶部
top++
- 遍历右部
right--
- 遍历底部
down--
- 遍历左部
left++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| package com.wereash.scut_hot100.matrix;
import java.util.ArrayList; import java.util.List; import java.util.Scanner;
public class Solution054 { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int m=scanner.nextInt(); int n=scanner.nextInt(); scanner.nextLine(); int[][] matrix=new int[m][n]; for (int i = 0; i < m; i++) { String[] str=scanner.nextLine().split(","); for (int j = 0; j < n; j++) { matrix[i][j]=Integer.parseInt(str[j]); } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { System.out.print(matrix[i][j]); if(j<n){ System.out.printf(","); } } System.out.println(); } int top=0,down=m-1; int left=0,right=n-1; List<Integer> list=new ArrayList<>(); while(true){ for (int j=left;j<=right;j++){ list.add(matrix[top][j]); } if(++top>down) break; for (int i=top;i<=down;i++){ list.add(matrix[i][right]); } if(--right<left) break; for (int j=right;j>=left;j--){ list.add(matrix[down][j]); } if(--down<top) break; for (int i=down;i>=top;i--){ list.add(matrix[i][left]); } if(++left>right) break; } for (int i:list){ System.out.printf(i+","); } }
}
|