我的理解,给定2维数组
1 2 3三角形判断
8 9 4
7 6 5
1 2 3三角形判断
8 9 4
7 6 5
“螺旋式”顺序输出:1 2 3 4 5 6 7 8 9
private static void PrintNumberasSpiralOrder()
{
// 1 2 3 4
// 12 13 14 5
// 11 16 15 6
// 10 9 8 7
// 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
int [,] a = new int [,]
{ { 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 } } ;
// int[,] a = new int[,] { { 1, 2, 3, 4 }, { 12, 13, 14, 5 }, { 11, 16, 15, 6 }, { 10, 9, 8, 7 } };
// int[,] a = new int[,] { { 1, 2 }, {4,3} };
const int N = 5 ;
// spiral
for ( int i = N - 1 , j = 0 ; i > 0 ; i -- , j ++ )
{
// i 从最大维度数开始
// j 从最小维度数开始
// i--来缩小范围
// j++来缩小范围
// k 增长缩小因子
for ( int k = j; k < i; k ++ )
System.Console.Write( " {0} " , a[j, k]); Console.WriteLine( "" );
for ( int k = j; k < i; k ++ )
System.Console.Write( " {0} " , a[k, i]); Console.WriteLine( "" );
for ( int k = i; k > j; k -- )
System.Console.Write( " {0} " , a[i, k]); Console.WriteLine( "" );
for ( int k = i; k > j; k -- )
System.Console.Write( " {0} " , a[k, j]); Console.WriteLine( "" );
}
// special case for middle element if N is odd
// 如果是奇数,则要条印中间的数。
if (N % 2 == 1 ) System.Console.Write(a[(N - 1 ) / 2 , (N - 1 ) / 2 ]);
}