JavaScript數(shù)組操作之旋轉(zhuǎn)二維數(shù)組
一、題目描述
給定一個 n × n 的二維矩陣 matrix
表示一個圖像。請你將圖像順時針旋轉(zhuǎn) 90 度。
你必須在 原地 旋轉(zhuǎn)圖像,這意味著你需要直接修改輸入的二維矩陣。請不要 使用另一個矩陣來旋轉(zhuǎn)圖像。
示例 1:
輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[[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]]
輸出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
二、思路與實現(xiàn)
從示例圖中就可以知道:
數(shù)組順時針旋轉(zhuǎn) 90 度之后,其實就是第1列變成第1行,第2列變成第2行,第3列變成第3行......
實現(xiàn)一:
/** * @param {number[][]} matrix * @return {void} Do not return anything, modify matrix in-place instead. */ var rotate = function (matrix) { let n = matrix.length; let res = new Array(n).fill(0).map(() => new Array(n).fill(0)); for (let i = 0; i < n; i++) for (let j = n - 1; j >= 0; j--) res[i][n - j - 1] = matrix[j][i]; return res; };
時間復(fù)雜度:O(N^2),其中N為matrix的邊長
空間復(fù)雜度:O(N^2)。我們需要使用一個和 matrix 大小相同的輔助數(shù)組。
還有另外一種思路:
- 按照左上到右下的對角線進行鏡像對稱
- 對矩陣的每一行進行反轉(zhuǎn)
比如這樣:
/** * @param {number[][]} matrix * @return {void} Do not return anything, modify matrix in-place instead. */ var rotate = function (matrix) { let n = matrix.length; // 先沿對角線鏡像對稱二維矩陣 for (let i = 0; i < n; i++) { for (let j = i; j < n; j++) { [matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]]; } } const reverseRow = (arr) => { let i = 0, j = arr.length - 1; while (i <= j) { [arr[i], arr[j]] = [arr[j], arr[i]]; i++; j--; } }; // 然后反轉(zhuǎn)二維矩陣的每一行 for (let row of matrix) { reverseRow(row); } return matrix; };
- 時間復(fù)雜度跟解法1一樣,但是卻不需要額外的空間復(fù)雜度
三、總結(jié)
到此這篇關(guān)于JavaScript數(shù)組操作之旋轉(zhuǎn)二維數(shù)組的文章就介紹到這了,更多相關(guān)JS旋轉(zhuǎn)二維數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解js location.href和window.open的幾種用法和區(qū)別
這篇文章主要介紹了詳解js location.href和window.open的幾種用法和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Bootstrap告警框(alert)實現(xiàn)彈出效果和短暫顯示后上浮消失的示例代碼
這篇文章主要介紹了Bootstrap告警框(alert)實現(xiàn)彈出效果和短暫顯示后上浮消失,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08javascript對下拉列表框(select)的操作實例講解
這篇文章主要介紹了javascript對下拉列表框(select)的操作。需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11