每日算法:旋转矩阵

开发 前端 算法
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。

[[431855]]

给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。

不占用额外内存空间能否做到?

示例 1:

  1. 给定 matrix =  
  2.   [1,2,3], 
  3.   [4,5,6], 
  4.   [7,8,9] 
  5. ], 
  6.  
  7. 原地旋转输入矩阵,使其变为: 
  8.   [7,4,1], 
  9.   [8,5,2], 
  10.   [9,6,3] 

示例 2:

  1. 给定 matrix = 
  2.   [ 5, 1, 9,11], 
  3.   [ 2, 4, 8,10], 
  4.   [13, 3, 6, 7], 
  5.   [15,14,12,16] 
  6. ],  
  7.  
  8. 原地旋转输入矩阵,使其变为: 
  9.   [15,13, 2, 5], 
  10.   [14, 3, 4, 1], 
  11.   [12, 6, 8, 9], 
  12.   [16, 7,10,11] 

思路: 按对角线反转后再逐行倒序

  1. [                      
  2.     [1,2,3],      
  3.     [4,5,6],     =>    
  4.     [7,8,9] 
  5.  
  6.     [1,4,7],      
  7.     [2,5,8],     =>    
  8.     [3,6,9] 
  9.  
  10.     [7,4,1],      
  11.     [8,5,2],     =>    
  12.     [9,6,3] 
  1. /** 
  2.  * @param {number[][]} matrix 
  3.  * @return {void} Do not return anything, modify matrix in-place instead
  4.  */ 
  5. var rotate = function(matrix) { 
  6.     const n = matrix.length; 
  7.     //对角线反转 0,0  n-1,n-1 
  8.     for(let i = 0; i < n; i++) { 
  9.         for(let j = 0; j < i; j++) { 
  10.             swap(matrix, [i, j], [j, i]); 
  11.         } 
  12.     } 
  13.  
  14.     //中线左右反转 
  15.     for(let i = 0; i < n; i++) { 
  16.         for(let j = 0; j < n / 2; j++) { 
  17.             swap(matrix, [i, j], [i, n - 1 - j]); 
  18.         } 
  19.     } 
  20.  
  21.     function swap(matrix, [x1, y1], [x2, y2]) { 
  22.         const tmp = matrix[x1][y1]; 
  23.         matrix[x1][y1] = matrix[x2][y2]; 
  24.         matrix[x2][y2] = tmp; 
  25.     } 
  26. }; 

leetcode:https://leetcode-cn.com/problems/rotate-matrix-lcci

 

责任编辑:武晓燕 来源: 三分钟学前端
相关推荐

2021-10-29 07:25:32

螺旋矩阵整数

2021-08-30 14:34:10

有效算法字符

2021-11-19 07:54:40

前端

2021-11-12 09:44:03

字符串算法复杂度

2021-09-30 09:58:14

路径总和二叉树

2021-11-04 09:59:03

动态规划策略

2021-09-03 09:41:36

字符串时间复杂度

2021-10-26 00:23:26

算法高频元素

2017-02-08 09:25:16

Spark分解推荐

2021-09-29 10:19:00

算法平衡二叉树

2021-10-27 10:43:36

数据流中位数偶数

2021-09-02 09:22:13

算法无重复字符

2021-09-08 09:52:34

语言

2021-09-10 08:31:54

翻转字符串单词

2023-02-15 09:00:00

算法推荐系统矩阵分解算法

2021-09-28 06:28:51

二叉树公共祖先

2021-10-19 10:09:21

三角形个数数组

2021-09-15 07:56:32

二叉树层次遍历

2021-08-26 05:08:25

相邻重复项算法

2019-12-26 13:06:07

Windows 10旋转屏幕Windows
点赞
收藏

51CTO技术栈公众号