每日算法:旋轉(zhuǎn)矩陣
作者: sisterAn
給你一幅由 N × N 矩陣表示的圖像,其中每個(gè)像素的大小為 4 字節(jié)。請(qǐng)你設(shè)計(jì)一種算法,將圖像旋轉(zhuǎn) 90 度。
給你一幅由 N × N 矩陣表示的圖像,其中每個(gè)像素的大小為 4 字節(jié)。請(qǐng)你設(shè)計(jì)一種算法,將圖像旋轉(zhuǎn) 90 度。
不占用額外內(nèi)存空間能否做到?
示例 1:
- 給定 matrix =
- [
- [1,2,3],
- [4,5,6],
- [7,8,9]
- ],
- 原地旋轉(zhuǎn)輸入矩陣,使其變?yōu)?
- [
- [7,4,1],
- [8,5,2],
- [9,6,3]
- ]
示例 2:
- 給定 matrix =
- [
- [ 5, 1, 9,11],
- [ 2, 4, 8,10],
- [13, 3, 6, 7],
- [15,14,12,16]
- ],
- 原地旋轉(zhuǎn)輸入矩陣,使其變?yōu)?
- [
- [15,13, 2, 5],
- [14, 3, 4, 1],
- [12, 6, 8, 9],
- [16, 7,10,11]
- ]
思路: 按對(duì)角線反轉(zhuǎn)后再逐行倒序
- [
- [1,2,3],
- [4,5,6], =>
- [7,8,9]
- ]
- [
- [1,4,7],
- [2,5,8], =>
- [3,6,9]
- ]
- [
- [7,4,1],
- [8,5,2], =>
- [9,6,3]
- ]
- /**
- * @param {number[][]} matrix
- * @return {void} Do not return anything, modify matrix in-place instead.
- */
- var rotate = function(matrix) {
- const n = matrix.length;
- //對(duì)角線反轉(zhuǎn) 0,0 n-1,n-1
- for(let i = 0; i < n; i++) {
- for(let j = 0; j < i; j++) {
- swap(matrix, [i, j], [j, i]);
- }
- }
- //中線左右反轉(zhuǎn)
- for(let i = 0; i < n; i++) {
- for(let j = 0; j < n / 2; j++) {
- swap(matrix, [i, j], [i, n - 1 - j]);
- }
- }
- function swap(matrix, [x1, y1], [x2, y2]) {
- const tmp = matrix[x1][y1];
- matrix[x1][y1] = matrix[x2][y2];
- matrix[x2][y2] = tmp;
- }
- };
leetcode:https://leetcode-cn.com/problems/rotate-matrix-lcci
責(zé)任編輯:武曉燕
來(lái)源:
三分鐘學(xué)前端