各位题友大家好! 今天是 @负雪明烛 坚持日更的第 32 天。今天力扣上的每日一题是「867. 转置矩阵」。

解题思路

正如题目给出的示例图所描述的,转置矩阵就是把 $M$ 行 $N$ 列的矩阵,转成 $N$ 行 $M$ 列的矩阵,原来矩阵中 $matrix[i][j]$ 的位置,会交换到新矩阵的 $res[j][i]$ 位置。

【每日一题】867. 转置矩阵 - 图1

注意:本题的矩阵的行列数可能不等,因此不能做原地操作,需要新建数组。

代码

Python, C++, Java 语言的代码如下:

  1. class Solution:
  2. def transpose(self, matrix: List[List[int]]) -> List[List[int]]:
  3. M, N = len(matrix), len(matrix[0])
  4. res = [[0] * M for i in range(N)]
  5. for i in range(M):
  6. for j in range(N):
  7. res[j][i] = matrix[i][j]
  8. return res
  1. class Solution {
  2. public:
  3. vector<vector<int>> transpose(vector<vector<int>>& matrix) {
  4. int M = matrix.size();
  5. int N = matrix[0].size();
  6. vector<vector<int>> res(N, vector<int>(M, 0));
  7. for (int i = 0; i < M; ++i) {
  8. for (int j = 0; j < N; ++j) {
  9. res[j][i] = matrix[i][j];
  10. }
  11. }
  12. return res;
  13. }
  14. };
  1. class Solution {
  2. public int[][] transpose(int[][] matrix) {
  3. int M = matrix.length;
  4. int N = matrix[0].length;
  5. int[][] res = new int[N][M];
  6. for (int i = 0; i < M; ++i) {
  7. for (int j = 0; j < N; ++j) {
  8. res[j][i] = matrix[i][j];
  9. }
  10. }
  11. return res;
  12. }
  13. }
  • 时间复杂度:O(M * N)
  • 空间复杂度:O(1),返回结果不算在空间复杂度内。

彩蛋:Python 可以使用 numpy 的 transpose 函数,直接对矩阵转置。

  1. class Solution:
  2. def transpose(self, matrix: List[List[int]]) -> List[List[int]]:
  3. import numpy as np
  4. return np.transpose(matrix).tolist()

刷题心得

本题比较简单,直接重拳出击。


OK,以上就是 @负雪明烛 写的今天题解的全部内容了,如果你觉得有帮助的话,求赞、求关注、求收藏。如果有疑问的话,请在下面评论,我会及时解答。

关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。

祝大家牛年大吉!AC 多多,Offer 多多!我们明天再见!