首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按螺旋顺序打印二维数组

按螺旋顺序打印二维数组
EN

Stack Overflow用户
提问于 2009-04-07 17:23:33
回答 29查看 97.4K关注 0票数 59

如何按螺旋顺序打印5×5的二维数组?

有没有什么公式可以让我按螺旋顺序打印任意大小的数组?

EN

回答 29

Stack Overflow用户

发布于 2013-03-05 07:15:57

这个程序适用于任何n*n矩阵。

代码语言:javascript
复制
public class circ {
    public void get_circ_arr (int n,int [][] a)
    {
        int z=n;
        {
            for (int i=0;i<n;i++)
            {
                for (int l=z-1-i;l>=i;l--)
                {
                    int k=i;
                    System.out.printf("%d",a[k][l]);
                }           

                for (int j=i+1;j<=z-1-i;j++)
                {
                    int k=i;
                    {
                        System.out.printf("%d",a[j][k]);
                    }
                }

                for (int j=i+1;j<=z-i-1;j++)
                {
                    int k=z-1-i;
                    {
                        System.out.printf("%d",a[k][j]);
                    }
                }

                for (int j=z-2-i;j>=i+1;j--)
                {
                    int k=z-i-1;        
                    {
                        System.out.printf("%d",a[j][k]);
                    }
                }
            }
        }
    }
}

希望能有所帮助

票数 6
EN

Stack Overflow用户

发布于 2013-12-30 10:03:12

在我学习Ruby的时候,我就被这个问题迷住了。这是我能做的最好的事情:

代码语言:javascript
复制
def spiral(matrix)
  matrix.empty? ? [] : matrix.shift + spiral(matrix.transpose.reverse)
end

您可以通过回顾此gist中的修订来查看我的其他一些解决方案。此外,如果您沿着链接返回到我从谁那里派生的要点,您会发现其他一些聪明的解决方案。非常有趣的问题,可以用多种优雅的方式来解决--尤其是在Ruby中。

票数 5
EN

Stack Overflow用户

发布于 2014-11-27 08:21:13

JavaScript解决方案:

代码语言:javascript
复制
var printSpiral = function (matrix) {
  var i;
  var top = 0;
  var left = 0;
  var bottom = matrix.length;
  var right = matrix[0].length;

  while (top < bottom && left < right) {

    //print top 
    for (i = left; i < right; i += 1) {
      console.log(matrix[top][i]);
    }
    top++;

    //print right column
    for (i = top; i < bottom; i += 1) {
      console.log(matrix[i][right - 1]);
    }
    right--;

    if (top < bottom) {
      //print bottom
      for (i = right - 1; i >= left; i -= 1) {
        console.log(matrix[bottom - 1][i]);
      }
      bottom--;
    }

    if (left < right) {
      //print left column
      for (i = bottom - 1; i >= top; i -= 1) {
        console.log(matrix[i][left]);
      }
      left++;
    }
  }
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/726756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档