【万人千题】C语言矩阵的转置12.4总结
目录
1,另开一个数组来存放转置内容。(row和col不等的情况)
867. 转置矩阵 - 力扣(LeetCode) (leetcode-cn.com)
一:知识点
1,概念
矩阵,在C语言中可以使用二维数组来表示,于是对于矩阵的一些运算,也可以用二维数组来进行。
矩阵的转置实际上就是将矩阵的行元素和列元素以主对角线为对称轴进行交换,如
1 | 2 |
3 | 4 |
主对角线为1,4.那么对其进行转置实际上就是将2和3对换。实际上也就是行列的交换.交换完如下:
1 | 3 |
2 | 4 |
二:应用
1,另开一个数组来存放转置内容。(row和col不等的情况)
那么,在实际应用中该如何使用?首先矩阵是row行,col列的一个二维数组,那么转置的时候实际上也就是将行元素与列元素进行交换。或者说将矩阵的上三角元素与下三角元素进行交换。矩阵的元素可以表示为matrix[ i ][ j ],我们在使用循环来解决矩阵问题时是两层循环嵌套,那么必有一个是先不变的,我们假设让 i 在 j 循环中改变得比j慢,那么这时候表示行元素就是matrix[ i ][ j ],而列元素我们直到是行在改变,于是我们可以使用matrix[ j ][ i ]来表示列元素,将两个元素交换,直到遍历完整个数组即可。
2,n阶矩阵(row与col相等的情况)
这时候,因为数组转置后行列都不变,可以在原数组中进行操作
void swap(int** arr,int row,int col)
{
for(i=0;i<row;i++)
{
for(j=i;j<col;j++)
{
int tmp=arr[i][j];
arr[i][j]=arr[j][i];
arr[j][i]=tmp;
}
}
}
这里需要注意的是,j一定要等于i,因为是根据主对角线来进行转置,所以,每次转置的起点实际上就在主对角线上的元素,如果j仍然从0开始,那么除了第一次之外,每次行元素都会比列元素多。
二:习题
867. 转置矩阵 - 力扣(LeetCode) (leetcode-cn.com)
/**
* 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().
*/
int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes)
{
int row=matrixSize;
int col=matrixColSize[0];
int** ans=(int**)malloc(sizeof(int*)*col);
*returnSize = col;
*returnColumnSizes = (int*)malloc(sizeof(int)*col);
int i=0;
for(i=0;i<col;i++)
{
ans[i]=(int*)malloc(sizeof(int)*row);
(*returnColumnSizes)[i]=row;
}
int j=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
ans[j][i]=matrix[i][j];
}
}
return ans;
}
这里主要用到的就是上述方法,将其行列元素在嵌套循环中交换完毕即可出结果。
这里还想总结一个点:
用malloc申请二维矩阵
int**arr=(int**)malloc(sizeof(int*)*row);
int i=0;
for(i=0;i<row;i++)
arr[i]=(int*)malloc(sizeof(int)*col);
先申请一块空间来存放int*也就是row行,之后对arr[ i ]中每个行元素进行初始化,让其拥有col个int的空间。不要忘记是对每个行都需要初始化开辟空间。还有一个点是,如果在leetcode中做题,有int**returncolsize的话,也需要对每个returncolsize进行这样的赋值。
三:小总结
对于矩阵的转置实际上要找到规律,找到之后就可以做出来。大家一起继续加油吧。感谢看到这里的小伙伴啦。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库