Java 顺时针打印矩阵
来源:互联网 发布:商品标签制作软件 编辑:程序博客网 时间:2024/05/19 13:10
题目描述
对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。
给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。
测试样例:
[[1,2],[3,4]],2,2
返回:[1,2,4,3]
public static void main(String[] args) { int m = 5; int n = 7; int mat [][] = new int[n][m]; int temp = 0; for (int a = 0 ; a < n;a++){ for(int j = 0; j < m; j++){ mat[a][j] = temp; System.out.print(temp+"\t"); temp++; } System.out.println(); } calc(mat,n,m); } public static void calc(int[][] mat, int n, int m){//m 列 n行 List<Integer> lists = new ArrayList<Integer>(); class Point{ int x; int y; public Point(int x,int y){ this.x = x; this.y = y; } } List<Point> up_left = new ArrayList<Point>(); List<Point> up_right = new ArrayList<Point>(); List<Point> down_left = new ArrayList<Point>(); List<Point> down_right = new ArrayList<Point>(); //如果 矩阵是胖的 或者是正方形 ,就是行数 小于 列数,或者 行数等于 列数 if(m >= n){ int row = n%2 == 1?n/2+1:n/2; int row_down = n/2; for (int i = 0 ; i < row ; i++){ up_left.add(new Point(i,i)); up_right.add(new Point(i,m-1-i)); } for(int i = 0 ; i < row_down ; i++){ down_left.add(new Point(n-1-i,i)); down_right.add(new Point(n-1-i,m-1-i)); } for (int i = 0 ; i < up_left.size() ; i++){ Point upleft = up_left.get(i); Point upright = up_right.get(i); Point downleft = null; Point downright = null; if(i <= row_down - 1){ downleft = down_left.get(i); downright = down_right.get(i); } for(int a = upleft.y;a <= upright.y ; a++){ lists.add(mat[upleft.x][a]); System.out.print(mat[upleft.x][a]+"\t"); } if(downleft != null){ for(int a = upright.x+1;a <= downright.x ; a++){ lists.add(mat[a][upright.y]); System.out.print(mat[a][upright.y]+"\t"); } for(int a = downright.y-1;a >= downleft.y ; a--){ lists.add(mat[downright.x][a]); System.out.print(mat[downright.x][a]+"\t"); } for(int a = downleft.x-1;a >= upleft.x+1 ; a--){ lists.add(mat[a][downleft.y]); System.out.print(mat[a][downleft.y]+"\t"); } } } } //是瘦的 行数大于列数 else{ int col = m%2 == 1?m/2+1:m/2; int col_down = m/2; for (int i = 0 ; i < col ; i++){ up_left.add(new Point(i,i)); down_left.add(new Point(n-1-i,i)); } for(int i = 0 ; i < col_down ; i++){ up_right.add(new Point(i,m-1-i)); down_right.add(new Point(n-1-i,m-1-i)); } for (int i = 0 ; i < up_left.size(); i++){ Point upleft = up_left.get(i); Point downleft = down_left.get(i); Point upright = null; Point downright = null; if(i <= col_down - 1){ upright = up_right.get(i); downright = down_right.get(i); } if(upright != null){ for(int a = upleft.y;a <= upright.y ; a++){ lists.add(mat[upleft.x][a]); System.out.print(mat[upleft.x][a]+"\t"); } for(int a = upright.x+1;a <= downright.x ; a++){ lists.add(mat[a][upright.y]); System.out.print(mat[a][upright.y]+"\t"); } for(int a = downright.y-1;a >= downleft.y ; a--){ lists.add(mat[downright.x][a]); System.out.print(mat[downright.x][a]+"\t"); } for(int a = downleft.x-1;a >= upleft.x+1 ; a--){ lists.add(mat[a][downleft.y]); System.out.print(mat[a][downleft.y]+"\t"); } }else{ for(int a = upleft.x;a <= downleft.x ; a++){ lists.add(mat[a][upleft.y]); System.out.print(mat[a][upleft.y]+"\t"); } } } } int result [] = new int[m*n]; for (int j = 0;j<lists.size();j++){ result[j] = lists.get(j); //System.out.print(result[j]+"\t"); } System.out.println(result); return result; }
0 0
- Java 顺时针打印矩阵
- java 顺时针打印矩阵
- java顺时针、逆时针打印矩阵
- 顺时针打印矩阵java实现
- java顺时针、逆时针打印矩阵
- java顺时针、逆时针打印矩阵
- 顺时针打印矩阵 按圈打印 java
- 矩阵------顺时针打印矩阵+顺时针旋转矩阵+之字形打印矩阵(Java)
- 顺时针打印矩阵 (JAVA实现)
- 顺时针打印矩阵 (JAVA实现)
- 剑指Offer:顺时针打印矩阵(JAVA)
- 剑指offer:顺时针打印矩阵(java)
- 【Java笔试题】顺时针打印矩阵
- 顺时针打印矩阵(Java实现)
- java面试题:顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- unity3D添加光源没有效果问题之一
- mongodb 角色管理
- 表格的一些属性
- OOA/OOD/OOP 的区别
- Android Fragment 真正的完全解析(上)
- Java 顺时针打印矩阵
- 【hadoop】Hadoop,MapReduce操作Mysql(比较早的操作方法,可以看看)
- 短信发送倒计时(以及正则验证)
- android中不依赖activity的dialog弹窗的实现
- LeetCode之链表数相加
- fopen() / fscanf() / fprintf() / fclose()
- 2016长乐夏令营 Day4
- easy ui 行内编辑数据并保存
- 供应链协同采购的需求分析与实现方法