简单的解析下螺旋数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的解析下螺旋数组相关的知识,希望对你有一定的参考价值。

 

技术分享

先简要的讲下思路: 螺旋数组因为数组的排列像一个海螺所以就被称作螺旋数组(讲点废话,这个是我杜撰的)大体的形状就如图片所显示的,那好下面我们就开始画圈圈,每一圈可以看作四步:第一 先把上面的边画出来,第二 把右边的边画出来, 第三 把下边的边画出来 ,第四  把左边的边画出来。画玩第一个圈,接着画里面的一个圈,第一。。。第二 。。第四。。画完之后去里面没有圈了。然后再画里面的里面的圈,直到画不动了(超出了数组的最大索引量)再停下来;嗯 思路就是这么个思路,下面是贴代码的时候:

技术分享
 1    static void Main(string[] args)
 2         {
 3             Console.WriteLine("请输入大于1的正整数:");
 4             int n = 0;
 5             try
 6             {
 7                 string read = Console.ReadLine();
 8 
 9                 n = Int32.Parse(read);
10 
11                 if (n <= 1)
12                 {
13                     Console.WriteLine("请输入正确的正整数:");
14                 }
15             }
16             catch
17             {
18                 Console.WriteLine("请输入正确的正整数:");
19             }
20 
21 
22             byte[,] b = new byte[n, n];
23 
24             byte result = 1; //输出的起始结果为1
25 
26             int itemN = n - 1; //要输出多少条线
27 
28             for (int m = 0; m < n / 2f; m++)
29             {
30                 if (itemN > 0)
31                 {
32                     //输出顶线
33                     for (int i = 0; i < itemN; i++)
34                     {
35                         b[m, i + m] = result;
36                         result++;
37                     }
38                     //输出右边线
39                     for (int i = 0; i < itemN; i++)
40                     {
41                         b[i + m, itemN + m] = result;
42                         result++;
43                     }
44                     //输出底线
45                     for (int i = itemN; i > 0; i--)
46                     {
47                         b[itemN + m, i + m] = result;
48                         result++;
49                     }
50                     //输出左线
51                     for (int i = itemN; i > 0; i--)
52                     {
53                         b[i + m, m] = result;
54                         result++;
55                     }
56                     //减去两条线
57                     itemN -= 2;
58                 }
59                 else
60                 {
61                     b[m, m] = result;
62                 }
63             }
64 
65             for (int i = 0; i < n; i++)
66             {
67                 Console.WriteLine();
68                 for (int j = 0; j < n; j++)
69                 {
70                     Console.Write(b[i, j].ToString().PadRight(10));
71                 }
72             }
73             Console.Read();
View Code

 

以上是看到一道面试题感觉有点意思于是研究了下。因最近在学习写邮件,发现自己文笔与表达太差。所以就写下此文,以锻炼文笔。即当作练习,也当作以后鄙视现在的证据。大家如果感觉幼稚请轻喷

 

以上是关于简单的解析下螺旋数组的主要内容,如果未能解决你的问题,请参考以下文章

二维数组2:螺旋矩阵两道题

代码随想录算法训练营第二天 | 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II

代码随想录算法训练营第二天 | 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II

解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

刷题精选:顺时针输出递增数组(螺旋递增升天数组)

刷题精选:顺时针输出递增数组(螺旋递增升天数组)