二维数组顺时针旋转
解决思路
- 创建新数组,将原数组的数据按照一定的顺序放入新数组中。
- 如果是顺时针的话,原数组中第一排的元素是应该放在新数组最后一列中的。
Java实现
java
public class RotateOne {
public static void main(String[] args) {
int[][] A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int n = 3;
int[][] B = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
B[j][n - 1 - i] = A[i][j];
}
}
ArrayUtil.printArray(B);
}
}
二维数组逆时针旋转
解决思路
- 逆时针的话,原数组第一排的元素放在新数组的第一列
Java实现
java
public class RotateTwo {
public static void main(String[] args) {
int[][] A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int n = 3;
int[][] B = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
B[n - 1 - j][i] = A[i][j];
//A[0][0]-->B[2][0]
//A[0][1]-->B[1][0]
}
}
ArrayUtil.printArray(B);
}
}
螺旋矩阵
解决思路
- 设定数组的边界,并且不断的更新边界值。
- 跳出循环的条件,当更新边界值不满足条件的时候,跳出循环。
Java实现
java
class Solution_LC54_II {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if (matrix.length == 0) {
return res;
}
int top = 0, bottom = matrix.length - 1, left = 0, right = matrix[0].length - 1;
while (true) {
for (int i = left; i <= right; i++) {
res.add(matrix[top][i]);
}
if (++top > bottom) {
break;
}
for (int i = top; i <= bottom; i++) {
res.add(matrix[i][right]);
}
if (--right < left) {
break;
}
for (int i = right; i >= left; i--) {
res.add(matrix[bottom][i]);
}
if (--bottom < top) {
break;
}
for (int i = bottom; i >= top; i--) {
res.add(matrix[i][left]);
}
if (++left > right) {
break;
}
}
return res;
}
}