2021/01/27做题记录
考研初试要准备将近一年,除了复习总要有点其他事情做,想利用每天学习之余时间做一做算法题,写成博客,也不知道一年能坚持做多少题,权当记录吧。
首先我们看一看题:
给定一个矩阵 A, 返回 A 的转置矩阵。
矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。
示例 1:
1
2 输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:
1
2 输入:[[1,2,3],[4,5,6]]
输出:[[1,4],[2,5],[3,6]]之后分析一下题目:
题目需要做的是转置矩阵,将一个m*n的矩阵转换成n *m的矩阵,那么需要做的就是遍历原矩阵的每一行和每一列,将其行列坐标互换赋给新矩阵。
接着我们看一看题目提供给我们的代码:
1 | int** transpose(int** A, int ASize, int* AColSize, int* returnSize, int** returnColumnSizes){ |
从变量名和形式中我们不难猜出,** A是原矩阵,ASize是A 矩阵的行, ACloSize是A矩阵的列, *returnSize 和 *returnColumSizes分别是目标矩阵的行和列。
基于分析我们给出一下代码:
1 | /** |
首先需要说明一点的就是这个答案参考了题解,因为刚开始,不太熟悉做题思路。但是通过仔细阅读这段代码,我有了自己的收获:
- C语言中通过sizeof获取变量的字节大小,我们可以写出
sizeof(int)
或者sizeof(a)
的代码来,题中sizeof(int)*AColSize
的意思就是获取 *AColSize大小*(int)长度的大小空间。 - malloc的作用是申请内存,作用可以与 new 关键字类比:当我们使用 new 关键字的时候我们不需要指定大小例如
1 | int *p; |
但如果我们要使用malloc,我们就写出了以下代码例如:
1 | int *p; |
这道题现在唯一不太懂的就是最后一段
1 | for(int i=0;i<*AColSize;i++) |
这段读了好久也没弄明白,先到这里吧还是自己水平不足,码着日后再来看,明天(下次)开始做一些简单的题入手。