1. 题目
Give a N*N square matrix, return an array of its anti-diagonals. Look at the example for more details.
Example:
Input:
1 2 3
4 5 6
7 8 9Return the following :
[
[1],
[2, 4],
[3, 5, 7],
[6, 8],
[9]
]
2. 解答
public ArrayList<ArrayList<Integer>> diagonal(ArrayList<ArrayList<Integer>> a) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
int dimension = a.size();
for (int i = 0; i < 2 * dimension - 1; i++) {
result.add(getDiagonal(i, a));
}
return result;
}
private ArrayList<Integer> getDiagonal(int layer, ArrayList<ArrayList<Integer>> a) {
ArrayList<Integer> result = new ArrayList<>();
for (int i = 0; i <= layer; i++) {
int j = layer - i;
// This avoids array out of boundary exception
if (i < a.size() && j < a.size())
result.add(a.get(i).get(j));
}
return result;
}
- 另一种解法
public ArrayList<ArrayList<Integer>> superDiagonal(ArrayList<ArrayList<Integer>> a) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
for (int i = 0; i < 2 * a.size() - 1; i++)
result.add(new ArrayList<Integer>());
// Fantastic
for (int i = 0; i < a.size(); i++) {
for (int j = 0; j < a.get(0).size(); j++)
result.get(i + j).add(a.get(i).get(j));
}
return result;
}