问题描述
给定一个二维二进制矩阵表示的屏幕,当旋转屏幕时,从左下角开始,在顺时针旋转k个90度。
示例 1: 输入: matrix = [[1,2,3],[4,5,6],[7,8,9]], k = 1 输出: [[7,4,1],[8,5,2],[9,6,3]]
示例 2: 输入: matrix = [[5,1,9],[11,18,13],[19,6,7]], k = 4 输出: [[5,1,9],[11,18,13],[19,6,7]]
注意:
- 矩阵的行数为n,n <= 10且n >= 1。
- 矩阵的列数为m,m <= 10且m >= 1。
- 0 <= matrix[i][j] <= 1。
- k % 90为旋转的度数。
解法一
解题思路:
我们可以通过转置矩阵然后翻转行来实现旋转屏幕的效果。具体步骤如下:
- 转置矩阵。
- 翻转矩阵的每一行。
- 重复上述步骤k次。
/*
* @lc app=leetcode.cn id=418 lang=javascript
*
* [418] 屏幕旋转
*/
// @lc code=start
function rotate(matrix, k) {
for (let i = 0; i < k; i++) {
// 转置矩阵
for (let i = 0; i < matrix.length; i++) {
for (let j = i; j < matrix[0].length; j++) {
let temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// 翻转矩阵的每一行
for (let i = 0; i < matrix.length; i++) {
for (let j = 0; j < Math.floor(matrix[0].length / 2); j++) {
let temp = matrix[i][j];
matrix[i][j] = matrix[i][matrix[0].length - 1 - j];
matrix[i][matrix[0].length - 1 - j] = temp;
}
}
}
}
// @lc code=end