当前位置: 首页 > news >正文

L35.【LeetCode题解】转置矩阵(C语言)

目录

1.题目

2.分析

函数参数的解释

矩阵转置的核心代码

3.代码

4.提交结果

5.简洁代码


1.题目

867. 转置矩阵

给你一个二维整数数组 matrix, 返回 matrix转置矩阵

矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[1,4,7],[2,5,8],[3,6,9]]

示例 2:

输入:matrix = [[1,2,3],[4,5,6]]
输出:[[1,4],[2,5],[3,6]]

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 1000
  • 1 <= m * n <= 105
  • -10^9 <= matrix[i][j] <= 10^9

2.分析

函数参数的解释

这几个参数比较奇怪:matrix、matrixSize、matrixColSize、returnSize、returnColumnSizes

LeetCode的注释上是这样说的:

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/

如果没看懂,可以打印参数看看情况:

指定矩阵[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],打印各个参数的值:

int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes) 
{printf("matrixSize:%d\n",matrixSize);printf("matrixColSize[0]:%d\n",matrixColSize[0]);printf("matrixColSize[1]:%d\n",matrixColSize[1]);printf("matrixColSize[2]:%d\n",matrixColSize[2]);printf("matrixColSize[3]:%d\n",matrixColSize[3]);return NULL;//随便返回一个值,为了编译能通过
}

查看测试结果的标准输出:

可以得出:matrixSize是矩阵的行数,矩阵第i行的元素个数为matrixColSize[i](i从0开始算)

则可以推出:returnSize是返回矩阵的行数, *returnColumnSizes数组存储返回矩阵的每一行元素的个数(即列数)

矩阵转置的核心代码

return_matrix[i][j]=matrix[j][i];

元素的行列互换

3.代码

C语言

本题较好考察了指针的运用

int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes) 
{*returnSize=matrixColSize[0];//原矩阵最少1列*returnColumnSizes=(int*)malloc(sizeof(int*)*matrixColSize[0]);for (int i=0;i<*returnSize;i++){(*returnColumnSizes)[i]=matrixSize;}int** return_matrix=(int**)malloc(sizeof(int**)*(*returnSize));for (int i=0;i<*returnSize;i++){return_matrix[i]=(int*)malloc(sizeof(int*)*(*returnColumnSizes[0]));for (int j=0;j<(*returnColumnSizes[0]);j++){return_matrix[i][j]=matrix[j][i];}}return return_matrix;
}

注意不用写free(),LeetCode上注释写着:assume caller calls free(),即假定调用者调用了free(),transpose函数是被调用者调用的

4.提交结果

5.简洁代码

如果想简化代码,可以一重循环和二重循环合并

int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes) 
{*returnSize=matrixColSize[0];//原矩阵最少1列*returnColumnSizes=(int*)malloc(sizeof(int*)*matrixColSize[0]);int** return_matrix=(int**)malloc(sizeof(int**)*(*returnSize));for (int i=0;i<*returnSize;i++){(*returnColumnSizes)[i]=matrixSize;return_matrix[i]=(int*)malloc(sizeof(int*)*(*returnColumnSizes[0]));for (int j=0;j<(*returnColumnSizes[0]);j++){return_matrix[i][j]=matrix[j][i];}}return return_matrix;
}

相关文章:

  • 11.Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档
  • 2025.4.28 Vue.js 学习笔记
  • Rancher 2.6.3企业级容器管理平台部署实践
  • 百家号等新媒体私信入口是否可以聚合到企业微信的客服,如何实现
  • E. Unpleasant Strings【Educational Codeforces Round 178 (Rated for Div. 2)】
  • SpringAI实现AI应用-搭建知识库
  • 核心技能:ArcGIS洪水灾害普查、风险评估及淹没制图
  • 【数学建模国奖速成系列】优秀论文绘图复现代码(三)
  • X²+1素数素数
  • 《Python实战进阶》 No46:CPython的GIL与多线程优化
  • 直播美颜SDK是什么?跨平台美颜SDK开发与接入全解析
  • errorno 和WSAGetlasterror的区别
  • Java写数据结构:队列
  • [CPCTF 2025] Crypto
  • 西门子PLC S7-1200电动机软启动、软停止的控制实例
  • nvm for windows 安装低版本 node 丢失 npm 安装
  • Kubernetes Ingress 深度解析
  • Java @Transactional事物隔离级别和默认值详解
  • 【模型量化】量化基础
  • 如何禁止AutoCAD这类软件联网
  • 内蒙古公开宣判144件毁林毁草刑案,单起非法占用林地逾250亩
  • AI世界的年轻人,如何作答未来
  • 外媒称菲方允许菲官员窜台,国台办:应停止在台湾问题上玩火
  • 广东省副省长刘红兵跨省调任湖南省委常委、宣传部长
  • 华夏幸福:去年营业收入237.65亿元,同比减亏12亿元
  • 解放日报:中国大模型企业的发展机遇已经到来