黑马程序员技术交流社区
标题:
用 递归 进行螺旋方阵的遍历
[打印本页]
作者:
niuapp
时间:
2015-5-25 21:47
标题:
用 递归 进行螺旋方阵的遍历
递归真的挺给力,我感觉更好理解点
/*
目的:在控制台输出螺旋方阵?
思路:用递归把螺旋方阵分成 一圈 + 中间
用规模递减的方法初始化数组。
想象一个正方形,外圈是边长为x的加号,内圈有一个边长为x-2的小正方形
+ + + + +
+ * * * +
+ * * * +
+ * * * +
+ + + + +
先在最外圈逐个初始化二维数组,然后再把外圈放在一边,把靠着外圈的一圈当做外圈继续初始化,用规模递减的方法直到最中间
*/
import java.util.Scanner;
class ForTest12
{
static int x = 0;
public static void main (String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("输入数组的边长:");
int x = sc.nextInt(); //确定螺旋方阵的边长
int [][] arr = tianJiaA(0,x);//调用方法把最开始的位置和边长传过去,让方法创建一个二维数组并返回。
for (int i=0; i<x; i++)//遍历螺旋方阵
{
for (int j=0; j<x; j++)
{
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
static int[][] tianJiaA(int a,int i)
{
int j = i;
int[][] arr = new int[i][j];//创建二维数组,并把这个数组传给下边的初始化方法
tianJia(a, arr, i);//a 是 数据的起始位置([0][0]、[1][1]这些),i是数组的长度
return arr;
}
//初始化数组的方法
static void tianJia(int a, int[][] arr, int i)
{// a--数组起始位置0([0][0]开始), i--数组长度
int j = i;//因为是 方阵 所以i==j
for (int m=a; m<j; m++) //从左边到右尽头
{
arr[a][m] = ++x;
}
for (int n=a+1; n<i; n++) //从右边尽头到右下尽头
{
arr[n][j-1] = ++x;
}
for (int o=j-2; o>=a; o--) //从右下尽头到左下尽头
{
arr[i-1][o] = ++x;
}
for (int p=i-2; p>=a+1; p--)//从左下尽头到左边
{
arr[p][a] = ++x;
}
//至此,初始化完最外圈的数组值
if((a+1)<i-2)//递归,直到把数组中的所有值初始化完毕
{
tianJia(a+1, arr, i-1);
}else if((a+1)==i-2){
arr[a+1][a+1] = ++x;
}else
return;
}
}
复制代码
作者:
Lucus
时间:
2015-5-25 21:57
楼主学的好快,今天刚看到这个作业!!!
作者:
汤姆大叔
时间:
2015-5-25 22:05
厉害的一笔啊。
作者:
TOBESKY
时间:
2015-5-25 22:11
明天学习这个,现在楼主这里预习下,赞一个
作者:
niuapp
时间:
2015-5-26 00:17
分拆 规模递减 用 递归 可以帮助分析和解决某些奇怪的问题
作者:
人在旅途~东营
时间:
2015-5-26 00:39
学习了,递归解决螺旋矩阵问题确实方便多了
作者:
guoyangpeng
时间:
2015-5-26 06:42
很经典的面试题吧
作者:
wwl0517
时间:
2015-5-26 09:19
经典例题,学习一下
作者:
王建伟
时间:
2015-5-26 09:48
学习了,牛、、、、、、、
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2