您的位置:首页 > 其它

Leetcode 54 spiral matrix II (螺旋矩阵)

2016-10-22 17:00 316 查看

一,问题描述

1,给定一个数n,以螺旋顺序产生一个具有n*n个元素的正方形矩阵。

2,格式如下:

输入: 3

输出: [1 2 3]

[8 9 4]

[7 6 5]

输入:4

输出:[1 2 3 4]

[12 13 14 5]

[11 16 15 6]

[10 9 8 7].

3,解题思路:

第一, 这题的解题思路和第54题(spiral matrix)是相似的,这两题可以结合一起做的。

第二 ,这题的思路如下:

首先,一次循环如下:把数组的第一行从左到后赋值递增的数(1,2,…),然后再把数组最后一列从上到下赋值递增的数,然后再把数组的最后一行,从右到左赋值递增的数。最后把数组的第一列从下到上赋值递增的数。这是一次循环。然后行减去2行(就是第一行和最后一行),列减去2列(就是第一列和最后一列),继续上述的循环操作。直到赋值的数大于n*n。

二,AC了的程序(用Java实现的)

import java.util.*;
public class Test2{

public int[][] generateMatrix(int n)
{
List<Integer> list=new ArrayList<Integer>();
int [][]data=new int

;
if(n==0)
{
return data;
}
int hang=n;   //表示行
int lie=n;    //表示列
int temp=1;

for(int i=0,j=0;i<hang&&j<lie;i++,j++)
{
//每一次循环完后,i和j各加1
for(int linlie=j;linlie<hang;linlie++)  //当n=3时, 把数组的第一行从左到有存入1,2,3
{
data[i][linlie]=temp;
// System.out.println("data[+"+i+"][+"+linlie+"]="+data[i][linlie]);
temp++;
}

for(int linhang=i+1;linhang<lie;linhang++)  //把数组的最后一列从上到下存入 4,5
{
data[linhang][hang-1]=temp;
temp++;
}

for(int linlie=hang-2;linlie>=j&&i!=(hang-1);linlie--) //把数组的最后一行从右到左存入,6 7
{
data[hang-1][linlie]=temp;
temp++;
}

for(int linhang=lie-2;linhang>i&&j!=(lie-1);linhang--)  //把数组的第一列,从下到上依次存入,8,(因为1已经存过
{
data[linhang][j]=temp;
temp++;
}
hang--;  //然后行减去一
lie--;  //列减去一,
if(temp>n*n)
{
break;
}

}

return data;

}

public static void main(String []args)
{
Test2 test=new Test2();
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();

int [][]result=test.generateMatrix(n);

for(int i=0;i<result.length;i++)
{
for(int j=0;j<result[i].length;j++)
{
System.out.print(result[i][j]+" ");
}
System.out.println();
}

System.out.println();
}
}


运行结果:

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