题目描述
大致思路:
- 将二维数组以中轴线对称
举个栗子:
5 1 9 11 11 9 1 5
2 4 8 10 ==> 10 8 4 2
13 3 6 7 7 6 3 13
15 14 12 16 16 12 14 15
- 将第一步得到的数组以右上角到坐下角为对称轴对称
11 9 1 5 15 13 2 5
10 8 4 2 ==> 14 3 4 1
7 6 3 13 12 6 8 9
16 12 14 15 16 7 10 11
第二步得到的数组即为最后结果。
代码如下:
function rotateArr(matrix: number[][]): void {
const len = matrix.length;
//中轴线对称
for (let i = 0; i < len; ++i) {
for (let j = 0; j <= Math.floor((len - 1) / 2); ++j) {
[matrix[i][j], matrix[i][len - j - 1]] = [matrix[i][len - j - 1], matrix[i][j]];
}
}
//右上角到坐下角为对称轴对称
let count = 1;
let index = len - 1;
for (let j = 0; j < len - 1 && index >= 0; ++j) {
let m = index - 1;
let n = count++;
while (m >= 0 && n < len) {
console.log(matrix[j][m], matrix[n][len - j - 1]);
[matrix[j][m], matrix[n][len - j - 1]] = [matrix[n][len - j - 1], matrix[j][m]];
m--;
n++;
}
index--;
}
}