数组相关知识回顾【二维数组】【java】【leetcode】

二维数组简介

类似于一维数组,二维数组也是由元素的序列组成。但是这些元素可以排列在矩形网格中而不是直线上。

二维数组在Java中的原理

在Java中,二维数组实际上是包含着 M 个元素的一维数组,每个元素都是包含有 N 个整数的数组。

二维数组的两个练习

螺旋矩阵

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:
输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

Java代码实现:

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int row = matrix.length;
        List<Integer> list = new ArrayList<>();
        if (row == 0) {
            return list;
        }
        int column = matrix[0].length;
        int total = row * column;
        int judgeRow=1;
        int judgeColumn = 0;
        int haha = 0;
        HEN:
        for (; ; ) {
            if (judgeRow == 1) {
                for (int i = haha; i < column - haha; i++) {
                    list.add(matrix[haha][i]);
                    total--;
                    if (total == 0) {
                        break HEN;
                    }
                }
                judgeRow = 0;
                haha++;
            }
            if (judgeColumn == 0) {
                for (int i = haha; i <= row - haha; i++) {
                    list.add(matrix[i][column - haha]);
                    total--;
                    if (total == 0) {
                        break HEN;
                    }
                }
                judgeColumn = 1;
            }
            if (judgeRow == 0) {
                for (int i = column - haha - 1; i >= haha - 1; i--) {
                    list.add(matrix[row - haha][i]);
                    total--;
                    if (total == 0) {
                        break HEN;
                    }
                }
                judgeRow = 1;
            }
            if (judgeColumn == 1) {
                for (int i = row - haha - 1; i >= haha; i--) {
                    list.add(matrix[i][haha - 1]);
                    total--;
                    if (total == 0) {
                        break HEN;
                    }
                    judgeColumn = 0;
                }
            }
        }
        return list;
    }
}
杨辉三角

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

示例:
输入: 5
输出:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

Java代码实现:

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> outer = new ArrayList<>();
        for (int i = 0; i < numRows; i++) {
            for (int j = 0; j <= i; j++) {
                List<Integer> inner;
                if (j == 0) {
                    inner = new ArrayList<>();
                    outer.add(inner);
                }
                if (i == j || j == 0) {
                    outer.get(i).add(1);
                } else {
                    outer.get(i).add(outer.get(i - 1).get(j - 1) + outer.get(i - 1).get(j));
                }
            }
        }
        return outer;
    }
}

你可能感兴趣的:(数组)