输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
程序员文章站
2022-07-12 09:14:00
...
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
package com.fit;
import java.util.ArrayList;
import java.util.List;
public class MyTest {
public static List<Integer> printMatrix(int[][] matrix) {
List<Integer> rs = new ArrayList<Integer>();
int length = matrix.length;
Integer[] direct = new Integer[2];
direct[0] = 0;
direct[1] = 1;
int row = 0;
int column = 0;
for(int i = 0;i < length*length; i++){
rs.add(matrix[row][column]);
//
System.out.print(" "+matrix[row][column]);
direct = validateDirect(direct,row,column,length);//获得顺时针方向
row = row + direct[0] ;
column = column + direct[1];
}
return rs;
}
/**
* row:0,column:n-1
* row:1,column:n-2
*/
private static Integer[] validateDirect(Integer[] direct, int row, int column, int length) {
//计算上下左右的距离由此决定运动方向
int top = row ;
int bottom = length - top-1;
int left = column ;
int right = length - left-1;
if(direct[0]==0){
if(direct[1]==1){//0,1,右
if(top==right){
direct[0]=1;
direct[1]=0;
}else {
return direct;
}
}else {
if(bottom==left){//0,-1;左
direct[0]=-1;
direct[1]=0;
}
else {
return direct;
}
}
}else {
if(direct[0]==1){//1,0;下
if(bottom==right){
direct[0]=0;
direct[1]=-1;
}else {
return direct;
}
}
else {
if(top==left||row-column<=1){//-1,0;上
direct[0]=0;
direct[1]=1;
}
else {
return direct;
}
}
}
return direct;
}
public static void main(String args[]){
int n = 9;
int [][] matrix = new int[n][n];
for(int i=0; i<n;i++){
for(int j=0 ; j<n;j++){
matrix[i][j] = (int) (Math.random()*9);
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
printMatrix(matrix);
}
}
推荐阅读
-
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
-
剑指offer:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
-
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
-
java-51-输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。...
-
第二十题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
-
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
-
剑指offer_输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字...
-
java实现输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
-
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
-
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字