蛇形矩阵Java实现
腾讯在线笔试题中的一道编程题,题意是输入N,构造一个N*N的蛇形矩阵。
例如输入3,则矩阵的输出形式应该是
123
894
765
我的想法是初始化四个边界参数,分别是上下左右,上和左初始值为0,右和下的初始值为n-1。
内部有四个循环,分别是是从左到右赋值,从上到下赋值,从右到左赋值,从下到上赋值,执行完这四次循环后,四个边界参数收缩。这四个循环的执行次数总共不超过n*n次,故外层再套一个大循环。下面是代码:
import java.util.Scanner;
/**
*
* @author John
*/
public class SneakMatrix {
private void handle()
{
Scanner scan = new Scanner(System.in);
int n =scan.nextInt();
//len为矩阵元素个数
int len=n*n;
int[][] a=new int[n][n];
int count=1;
//设立四个边界,上下左右,顺时针循环一次后,边界就缩小
int l=0,t=0,r=n-1,b=n-1,i,j;
while(len>0)
{
//从左到右
for(i=t,j=l;j<=r;j++)
{
a[i][j]=count++;
len--;
}
//从上到下
for(--j,++i;i<=b;i++)
{
a[i][j]=count++;
len--;
}
//从右到左
for(--i,--j;j>=l;j--)
{
a[i][j]=count++;
len--;
}
//从下到上,这里的t参数要提前改变,否则就会重复访问到上边界的值,比如第一次时会访问到a[0][0]
t++;
for(++j,--i;i>=t;i--)
{
a[i][j]=count++;
len--;
}
l++;r--;b--;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
System.out.print(a[i][j]);
}
System.out.println("");
}
}
public static void main(String[] args) {
new SneakMatrix().handle();
}
}
输出结果为: