【顺时针打印矩阵】笔试版
顺时针打印数字矩阵
https://www.nowcoder.com/questionTerminal/ce0c22a435114108bd9acc75f81b5802
顺时针打印矩阵:https://www.nowcoder.com/questionTerminal/ce0c22a435114108bd9acc75f81b5802
备注:《剑指offer》原题,但是在线笔试版本由于输入格式&时间限制,有许多细节需要调整。
为了避免超时的tips:
(1)不能用Scanner而改用BufferedReader——这里要记住BufferedReader的使用模板&注意事项:
-----1.0 需要import的有三个类,也可以直接写:
import java.io.*;
-----1.1 使用BufferedReader必须在main函数后面写throws IOException
-----1.2 new一个BufferedReader的代码为
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
-----1.3 用br读取一行输入的整数,存储在数组里要这样写:
String[] s = br.readLine().split(" "); //以空格作为分隔,读入的每一个整数先作为一个字符串存储在数组中 int[] array = new int[n]; for(int i = 0; i < n; i++) array[i] = Integer.parseInt(s[i]); //再把每个“字符串”形式的整数转换为int型
-----1.4 用br读取多行输入,要写while(br.ready())
作为循环条件
(2)打印矩阵之前不用ArrayList存储所有元素,而用StringBuilder存储
AC代码如下:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(br.ready()) { String[] s = br.readLine().split(" "); int m = Integer.parseInt(s[0]); int n = Integer.parseInt(s[1]); if(m == -1 && n == -1) break; int[][] matrix = new int[m][n]; for(int i = 0; i < m; i++) { String[] temp = br.readLine().split(" "); for(int j = 0; j < n; j++) matrix[i][j] = Integer.parseInt(temp[j]); } printMatrix(matrix, m, n); } } private static void printMatrix(int[][] mat, int rows, int cols) { if(mat == null || rows == 0 || cols == 0) return; StringBuilder sb = new StringBuilder(); int min = Math.min(rows, cols); for(int s = 0; 2*s < min; s++) { int endRow = rows-1-s; int endCol = cols-1-s; for(int j = s; j <= endCol; j++) //直接打印第一行 sb.append(mat[s][j]+","); if(endRow > s) { //存在第二行的条件 for(int i = s+1; i <= endRow; i++) sb.append(mat[i][endCol]+","); if(endCol > s) { //存在第三行的条件 for(int j = endCol-1; j >= s; j--) sb.append(mat[endRow][j]+","); if(endRow > s+1) { //存在第四行的条件 for(int i = endRow-1; i > s; i--) sb.append(mat[i][s]+","); } } } } //打印 System.out.println(sb.substring(0,sb.length()-1)); } }