我想在Java中以螺旋顺序打印2D数组列表。在任何时候,我都通过变量t,b,l,r(其含义在下面的代码中给出)来标记arraylist遍历和未遍历的部分之间的界限。另外可变的目录是我想要遍历的方向。以螺旋顺序打印2D数组列表indexOutOfBounds异常
dir=0(right),1(down),2(left),3(up).
这里是我的代码:
public class Solution {
// DO NOT MODIFY THE LIST
public ArrayList<Integer> spiralOrder(final List<ArrayList<Integer>> a) {
ArrayList<Integer> result = new ArrayList<Integer>();
// Populate result;
/*
* m=no. of rows, n=no. of cols, t=top row of untraversed list, b=bottom
* row of untraversed list, l=left most col of untraversed list and
* r=right most col of untraversed list
*/
int m = a.size();
int n = a.get(0).size();
int dir = 0;
int t = 0;
int b = m - 1;
int l = 0;
int r = n - 1;
while (l <= r && t <= b) {
if (dir == 0) {
for (int i = l; i <= r; i++) {
result.add(a.get(t).get(i));
dir = 1;
t++;
}
} else if (dir == 1) {
for (int i = t; i <= b; i++) {
result.add(a.get(i).get(r));
dir = 2;
r--;
}
} else if (dir == 2) {
for (int i = r; i >= l; i--) {
result.add(a.get(b).get(i));
dir = 3;
b--;
}
} else if (dir == 3) {
for (int i = b; i >= b; i++) {
result.add(a.get(i).get(l));
dir = 0;
l++;
}
}
}
return result;
}
}
任何人都可以点我在哪里,我会犯错? (我得到IndexOutOfBounds异常)