您的位置:首页 > 编程语言 > Java开发

蛇形矩阵Java实现

2016-04-03 21:39 260 查看

蛇形矩阵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

;
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();
}
}


输出结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: