如何按螺旋顺序打印5×5的二维数组?
有没有什么公式可以让我按螺旋顺序打印任意大小的数组?
发布于 2013-03-05 07:15:57
这个程序适用于任何n*n矩阵。
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]);
}
}
}
}
}
}
希望能有所帮助
发布于 2013-12-30 10:03:12
在我学习Ruby的时候,我就被这个问题迷住了。这是我能做的最好的事情:
def spiral(matrix)
matrix.empty? ? [] : matrix.shift + spiral(matrix.transpose.reverse)
end
您可以通过回顾此gist中的修订来查看我的其他一些解决方案。此外,如果您沿着链接返回到我从谁那里派生的要点,您会发现其他一些聪明的解决方案。非常有趣的问题,可以用多种优雅的方式来解决--尤其是在Ruby中。
发布于 2014-11-27 08:21:13
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++;
}
}
};
https://stackoverflow.com/questions/726756
复制相似问题