单向遍历
参考答案:https://leetcode.cn/problems/diagonal-traverse/solution/tong-su-yi-dong-by-lfool-eozv/ 题目不难理解,就是边界问题很难弄。这个方法应该是最好理解的了,就是可能性能不好…
int m, n;ArrayList<Integer> arrayList = new ArrayList();public int[] findDiagonalOrder(int[][] mat) {m = mat.length;n = mat[0].length;boolean dir = true;//true表示要反转//遍历第一行for (int j = 0; j < n; j++) {helper(mat, 0, j, dir);dir = !dir;}//遍历最后一列for (int i = 1; i < m; i++) {helper(mat, i, n - 1, dir);dir = !dir;}int[] ans = new int[m * n];for (int i = 0; i < m * n; i++) {ans[i] = arrayList.get(i);}return ans;}//沿着左下角的方向遍历public void helper(int[][] mat, int x, int y, boolean dir) {ArrayList<Integer> list = new ArrayList<>();for (int i = x, j = y; i < m && j >= 0; i++, j--) {list.add(mat[i][j]);}if (dir) {Collections.reverse(list);}arrayList.addAll(list);}
