我想在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異常)