类似于一维数组,二维数组也是由元素的序列组成。但是这些元素可以排列在矩形网格中而不是直线上。
在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;
}
}