黑马程序员技术交流社区
标题:
螺旋数组
[打印本页]
作者:
游呤人
时间:
2015-7-11 14:25
标题:
螺旋数组
package holle;
import java.util.ArrayList;
/*
*
*
* 1 2 3 4 5
* 16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
* 思路:
* 这个矩阵,可以理解成,不撞南墙不调头,一直走到一条死胡同里,
*
* 定义一个二维数组记录每次行走的过程,而每次转弯之后都在同行或同列进行
* ,走过的地方不能在走,直到它上不能走下不能走,左不能走,右不能走。
* 即正好填满整个二维数组。
* 我的
* for(;i<arr.length-1;i++){
if(arr[j][i+1]!=0){
break;
}
arr[j][i]=count;
count++;
}
我没定义i,j的初始化值定义在了外层大循环的上面
,这是因为,我们的i,或者是J将会是我下次的变量,
或者递增
0 1 2 3 4
--------------
1 2 3 4 5 | 0
6 | 1
7 | 2
8 | 3
9 | 4
所以我不希望下一次循环开始时的值发生改变,而是将每一次循环的结果与下一次共享
*
* 这是我们从里层四个小循环的思路。
*
*
* 我们知道一个这个数组是递增,每次的增涨值是一,
* 而这个数组正好是N×N的方形矩阵,最大
* 值就是N×N 那么这就是我们的大循环的边界。
*
*
*
*
* 我们可以理解成 行号不变长值是
*
* 从左至右
* 行号不变 列号自减
* 从上倒下 号不变
* */
@SuppressWarnings("all")
public class Day_04_5 {
public static void main(String[] args) {
int[][] arr=new int[10][10];
int i=0; //列号,控制
int j=0;//行号,控制
int count=1;
while(count<arr.length*arr.length){
//右 控制j不变 i自增
for(;i<arr.length-1;i++){
if(arr[j][i+1]!=0){
break;
}
arr[j][i]=count;
count++;
}
//下 控制i不变 J自增
for(;j<arr[i].length-1;j++){
if(arr[j+1][i]!=0){
break;
}
arr[j][i]=count;
count++;
}
//左 控制j不变 i自减
for(;i>0;i--){
if(arr[j][i-1]!=0){
break;
}
arr[j][i]=count;
count++;
}
//上 控制i不变 j自减
for(;j>0;j--){
if(arr[j-1][i]!=0){
break;
}
arr[j][i]=count;
count++;
}
arr[j][i]=count;
//count++;
}
for(int x=0;x<arr.length;x++){
for (int k = 0; k < arr[x].length; k++) {
System.out.print(arr[x][k]+"\t");
}
System.out.println();
}
}
}
作者:
游呤人
时间:
2015-7-11 14:34
哈哈,我的第一个贴子
作者:
18671183990
时间:
2015-7-11 14:35
过来学习了,自己弄了好久都没有思路,学习下,感谢楼主分享。
作者:
扶摇丶
时间:
2015-7-11 23:49
我刚学习JAVA,对这道题现在还是没有思路。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2