public class Solution { public ArrayList<ArrayList<Integer>> diagonal(ArrayList<ArrayList<Integer>> A) { ArrayList<ArrayList<Integer>> result = new ArrayList<>(); int len = A.size() * 2 - 1; for (int k = 0; k < len; k ++) { int i, j; if (k < A.size()) { i = 0; j = k; } else { i = k - A.size() + 1; j = A.size() - 1; } ArrayList<Integer> row = new ArrayList<>(); int rowLen; if (k < A.size()) { rowLen = k + 1; } else { rowLen = len - k; } for (int v = 0; v < rowLen; v ++) { row.add(A.get(i + v).get(j - v)); } result.add(row); } return result; } }