假设我有一个2D整数数组,mxn。 我想像正弦波一样遍历这个数组。
具体来说,遍历将从最后一行开始,第一列移动到第一行和第二列,移动到最后一行和第三列。
我附上了一张图片,以便进一步阐述。
T: 我只知道如何按顺序遍历,但我正在考虑转换列,在每一轮更改列的起始索引,但我无法创建一个组合循环来执行此操作。
我的尝试:
boolean startsAtbottom=true;
//cols become rows, startPoint alternates
for(int i = 0;i<n;i++)
{
if(startsAtbottom)
{
for(int j =m-1;j>-1;j--)
{
System.out.print(myArr[j][i]);
}
startsAtbottom=false;
}
else
{
for(int j =0;j<m;j++)
{
System.out.print(myArr[j][i]);
}
startsAtbottom=true;
}
}
答案 0 :(得分:0)
您的解决方案有效,而且没有任何问题。但是你可以通过这样做摆脱if
:
for (int i = 0; i < n; i++) {
boolean goingUp = i % 2 == 0;
for (int j = 0; j < m; j++) {
int row = goingUp ? m - 1 - j : j;
System.out.println(myArr[row][i]);
}
}
答案 1 :(得分:0)
从您的输入开始,您有:
0
(i & 0x01) == 0
但是那不相关)鉴于此,很容易对该模式进行建模:
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
int value = data[i][i % 2 == 0 ? (cols - j - 1) : j]
}
}
公式cols - j - 1
允许您从结尾开始并向后退(请j = 0
cols - 1
j = cols - 1
,cols - (cols - 1) - 1 == 0
Aggregate
exec()
)。
请注意,Java既不是专业也不是专业,因为二维数组只是一个数组数组,因此根据您的实际布局,您可能需要交换索引。