java 从外向里逆时针打印矩阵 (输入行未知)
输入描述:每行两个数字表示矩阵MXN(M行,N列),使用空格隔开。
取值范围 1<M<100,1<N<1000
矩阵元素从1到MXN,依次填充
如
输入行未知
3 2 (表示{{1,2},{3,4},{5,6}})
输出
2 1 3 5 6 4
import java.util.ArrayList;
import java.util.Scanner;
public class b {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
ArrayList<ArrayList<Integer>> a=new ArrayList<ArrayList<Integer>>();
while(sc.hasNextLine()) {
String s= sc.nextLine();
if (s.trim().equals(""))
break;
String s1[]=s.split(" ");
int m=Integer.valueOf(s1[0]);
int n=Integer.valueOf(s1[1]);
int [][]arr=setarr( m, n);
a.add(printMatrix( arr));
//sc.nextLine();
}
sc.close();
for (int i =0;i<a.size();i++) {
for (int j =0;j<a.get(i).size();j++)
System.out.print(a.get(i).get(j)+" ");
System.out.println();
}
}
public static int[][] setarr(int m,int n){
int array[][]=new int [m][n];
int count=1;
for(int i=0;i<array.length;i++)
for(int j=0;j<array[0].length;j++)
{
array[i][j]=count;
count++;
}
return array;
}
public static ArrayList<Integer> printMatrix(int [][] array) {
ArrayList<Integer> result = new ArrayList<Integer> ();
if(array.length==0) return result;
int n = array.length,m = array[0].length;
if(m==0) return result;
int layers = (Math.min(n,m)-1)/2+1;//这个是层数
for(int i=0;i<layers;i++){
for(int k = m-i-1;k>=i;k--) result.add(array[i][k]);//右上到左上
for(int j=i+1;j<n-i;j++) result.add(array[j][i]);//左上到左下
for(int k = i+1;k<m-i;k++) result.add(array[n-i-1][k]);//左下到右下
for(int j=n-i-2;(j>i)&&(m-i-1!=i);j--) result.add(array[j][m-i-1]);//右下至右上
}
return result;
}
}