本帖最后由 DoubleUUU 于 2015-11-20 01:02 编辑
分享一个自己研究了两小时的题目:打印螺旋二维数组
图解思路(附件):
- /*
- * 需求写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
- *
- * 思路:
- *1、定义一个方法将方阵最外圈按螺旋方式从num开始赋值,其余位置不赋值,返回-最外圈按螺旋式排列方阵
- *2、一个螺旋式方阵可以看成为多个-最外圈按螺旋式排列方阵-不断嵌套组成的
- *3.将最外圈按螺旋式排列的方阵-组合起来就得到了螺旋方阵
- * */
- public class LuoXuan {
- public static void main(String[] args) {
- int[][] arr0;
- int len=7;//定义方阵的长度
- int num=1;//定义-最外圈按螺旋式排列方阵-的起始值
- int count=1;//记录子圈的等级
- arr0=arrayOut(len,num);//得到长度为n的-最外圈按螺旋式排列方阵
- while((len=len-2)>0){//判断是否还有子圈
- int[][] arr1=new int[len][len];//arr1 用来存储子圈
- num=4*(len+2)-4+num;//计算子圈的起始值
- arr1=arrayOut(len,num);//得到子圈方阵
- for(int x=0;x<arr1.length;x++){
- for(int y=0;y<arr1.length;y++){
- //将子圈方阵的值赋给arr0,不断组合
- arr0[x+count][y+count]=arr1[x][y];//子圈的行、列加上相应的级别对应的赋值给arr0
- }
- }
- count++;//每组合了一个方阵,子圈等级加1
- }
- printArray(arr0);
- }
- //将长度为len的方阵最外圈按螺旋方式从num开始赋值,其余位置不赋值,返回-最外圈按螺旋式排列方阵
- //按从arr[0][0]顺时针给最外圈赋值
- public static int[][] arrayOut(int len,int num){
- int[][] arr=new int[len][len];
- for(int y=0;y<len;y++){//a[0][0]→a[0][len-1]
- arr[0][y]=num++;
- }
- for(int x=1;x<len;x++){//a[0][len-1]→a[len-1][len-1]
- arr[x][len-1]=num++;
- }
- for(int y=len-2;y>=0;y--){
- arr[len-1][y]=num++;
- }
- for(int x=len-2;x>0;x--){
- arr[x][0]=num++;
- }
- return arr;
- }
- //打印二维数组
- public static void printArray(int[][] arr){
- for(int x=0;x<arr.length;x++){
- for(int y=0;y<arr.length;y++){
- System.out.print(arr[x][y]+"\t");
- }
- System.out.println();
- }
- }
- }
复制代码 运行结果
小白,不太会注释,望大家见谅,觉得应该还算新颖的观点,不足之处还望大牛指教
http://bbs.itheima.com/forum.php?mod=attachment&aid=OTM3NTd8NDg0NzAwNjlmZDhhNWY0YzFmZGRjMmI5MzRhNTFiYjF8MTczMTExOTU4Mg%3D%3D&request=yes&_f=.pn
|
-
1.png
(78.12 KB, 下载次数: 161)
思路
|