全球即时看!#yyds干货盘点# 名企真题专题:顺时针打印数字矩阵

2022-12-30 19:21:06 来源:51CTO博客


(资料图)

1.简述:

描述

给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素

输入描述:

输入第一行是两个数字,分别代表行数M和列数N;接下来是M行,每行N个数字,表示这个矩阵的所有元素;当读到M=-1,N=-1时,输入终止。

输出描述:

请按逗号分割顺时针打印矩阵元素(注意最后一个元素末尾不要有逗号!例如输出“1,2,3”,而不是“1,2,3,”),每个矩阵输出完成后记得换行

示例1

输入:

3 31 2 34 5 67 8 9-1 -1

输出:

1,2,3,6,9,8,7,4,5

2.代码实现:

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));    }}

标签: 打印矩阵 分别代表 设计一个

上一篇:全球资讯:【分布式技术专题】「分布式协调原理」全流程透析分析Zookeeper的原理实现
下一篇:世界快讯:#yyds干货盘点# 名企真题专题:删除重复字符