iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0

觀前提醒:

  1. 我預設大家已經先思考並分析過題目,沒啥想法才開始 google 找解題靈感。若無,建議每題先花 1~2 顆番茄鐘的時間來分析題目比較好。可參考番茄鐘工作法
  2. 承上,既然已經有思考過了,那我這邊直接 po 題目 + 解題想法 + code +心得 。若已經在 code 內有足夠的註解了,那我可能解題想法 & 心得的部分就不會寫太多,免得干擾你的思考。
  3. 所有解法都是已經取得系統的 Accepted,但或許不是最優解法,請多包涵。
  4. 若對於解法不太懂,可以嘗試用 Chrome 的 debugger 來試跑看看 (教學文)
  5. 最後,歡迎在下面留言指教~教學相長才會進步歐~/images/emoticon/emoticon41.gif

題目

You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).

You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

Example 1:
image

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [[7,4,1],[8,5,2],[9,6,3]]

Example 2:
image

Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

Example 3:

Input: matrix = [[1]]
Output: [[1]]

Example 4:

Input: matrix = [[1,2],[3,4]]
Output: [[3,1],[4,2]]

Constraints:

  • matrix.length == n
  • matrix[i].length == n
  • 1 <= n <= 20
  • -1000 <= matrix[i][j] <= 1000

解題想法

這題我卡了一陣子,後來我是去 google 下關鍵字 "Matrix rotation by 90 degrees",跑出這篇文章
照著文章中提到的:

  • Find the transpose of the matrix. (先把二維陣列中, matrix[i][j] & matrix[j][i] 的數值對調。)
  • Reverse every rows of the matrix. (再把每一個row,直接做 reverse。)
    最後就可以得到一個順時針旋轉90度的矩陣了~參考動畫如下:
    gif

CODE

/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function (matrix) {
  const n = matrix.length;
  // i 代表 row,j 代表 column。
  // 先把二維陣列中, matrix[i][j] & matrix[j][i] 的數值對調。(transpose: 轉置矩陣)
  for (let i = 0; i < n; i++) {
    for (let j = i; j < n; j++) {
      let temp = matrix[i][j];
      matrix[i][j] = matrix[j][i];
      matrix[j][i] = temp;
    }
  }
  // 再把每一個row,直接做 reverse。即可得
  for (let i = 0; i < n; i++) {
    matrix[i].reverse();
  }
};

心得

這題一開始,看到關鍵字"Rotate" + "matrix",我還想興沖沖跑去書櫃旁,找到那塵封已久的線性代數筆記,打開"旋轉矩陣"的章節,想說好好的來研究研究一番XDDDD

p.s 周老師的網站真D好用,寫文章到一半,發現某些觀念忘了,還可以趕快找來複習一波哈哈哈

但是,我發現一般刷題時,通常不會需要調用到這麼多的數學函式啊,這樣整個效率會很低落耶,我們又不是要考研究所當榜首沒事拿石頭砸自己腳幹嘛XD


上一篇
[LeetCode with JavaScript] Day 2: Two Sum
下一篇
[LeetCode with JavaScript] Day 4: Reverse Integer
系列文
[LeetCode with JavaScript] 一起來刷 LeetCode吧 ~~~ (ノ>ω<)ノ30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言