转圈打印矩阵

题目:

给定一个整型矩阵matrix,请按照转圈的方式打印它。

例如:

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

要求:

额外空间复杂度O(1)。

源代码:

package 数组和矩阵问题;
import java.util.Scanner;
public class first {
//构造矩阵
public static void Creatematrix(int n) throws Exception{
int [][]array=new int[20][20];//用二位数组存储矩阵
int number=1;
if(n<=0||n>=20){//判断n的合法性
throw new Exception("参数错误!");
}
for(int i=0;i<n;i++)//初始化矩阵
{
for(int j=0;j<n;j++)
{
array[i][j]=number;
number++;
}
}
Printmatrix(array,n);
}

//打印初始矩阵
public static void Printmatrix(int a[][],int n){
System.out.println("初始化矩阵为:");
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
System.out.print(a[i][j]+"\t");
}
System.out.println();
}

int tR=0;
int tC=0;
int dR=n-1;
int dC=n-1;
System.out.println("循环打印:");
while(tR<=dR&&tC<=dC)
{
printEdge(a,tR++,tC++,dR--,dC--);
}
}
//转圈打印一个子矩阵的外层
public static void printEdge(int a[][],int tR,int tC,int dR,int dC){

if(tR==dR)//只有一行时
{
for(int i=tC;i<=dC;i++)
{
System.out.print(a[tR][i]+"\t");
}
}
else if(tC==dC)//只有一列时
{
for(int i=tR;i<=dR;i++)
{
System.out.print(a[i][tC]+"\n");
}
}
else//一般情况
{
int curR=tR;
int curC=tC;
while(curC!=dC)//上
{
System.out.println(a[tR][curC]+"\t");
curC++;
}
while(curR!=dR)//右
{
System.out.println(a[curR][dC]+"\t");
curR++;
}
while(curC!=tC)//下
{
System.out.println(a[dR][curC]+"\t");
curC--;
}
while(curR!=tR)//左
{
System.out.println(a[curR][tC]+"\t");
curR--;
}
}
}
public static void main(String[] args) throws Exception {
Scanner scan=new Scanner(System.in);
int n;//矩阵行(列)数目
System.out.println("请输入矩阵的行(列)的数目(<20):");
n=scan.nextInt();//接收n的值
Creatematrix(n);//构造矩阵


}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值