【发布时间】:2020-07-01 15:50:27
【问题描述】:
我有一个这样的矩阵:
{
{4,5,6,7,8},
{2,3,1,4},
{1,2},
{1,2,3,4,5}
{5,6,7,8}
}
我想以螺旋方式打印,所以输出应该是:
4 5 6 7 8 4 2 5 8 7 6 5 1 1 1 3 1 4 3 2
我目前的螺旋矩阵代码是这样的:
void spiral(int a[][]) {
int i, k = 0, l = 0, m = a.length, n = a[0].length;
while (k < m && l < n) {
for (i = l; i < n; ++i) {
System.out.print(a[k][i] + " ");
}
k++;
for (i = k; i < m; ++i) {
System.out.print(a[i][n - 1] + " ");
}
n--;
if (k < m) {
for (i = n - 1; i >= l; --i) {
System.out.print(a[m - 1][i] + " ");
}
m--;
}
if (l < n) {
for (i = m - 1; i >= k; --i) {
System.out.print(a[i][l] + " ");
}
l++;
}
}
问题是我无法理解如何使它适用于不相等的数组长度行。我非常感谢您对此提供的任何帮助和见解。
【问题讨论】:
-
你的输出有 4 个 1,而你的输入只有 3 个?
-
嗯。您可以“消耗”这些行,即在打印它们时从数组中删除元素:打印第一行并删除所有元素;打印下面所有行的最后一个元素并删除它们。从右到左打印最后一行;删除所有元素。打印从下到上仍有元素的行的第一个元素。重复。当没有更多要打印的内容时停止。
标签: java arrays algorithm matrix