力扣(LeetCode)566. 重塑矩阵(C语言)

一、环境说明

  1. 本文是 LeetCode 566题 : 重塑矩阵,使用c语言实现。
  2. 模拟。
  3. 测试环境:Visual Studio 2019。

二、代码展示

//两种做法
//使用一维数组保存原二维矩阵。O(n)空间
//使用小学奥数/线性代数,映射原二维矩阵和新二维矩阵的元素。O(1)空间
int** matrixReshape(int** mat, int matSize, int* matColSize, int r, int c, int* returnSize, int** returnColumnSizes){
    //改变矩阵形状。
    if(r*c!=matSize*(matColSize[0])){//不能改变,输出原矩阵
        *returnSize = matSize;
        *returnColumnSizes = matColSize;
        return mat;
    }
    int **ans = (int**)calloc(r,sizeof(int*));
    returnSize[0] = r;
    returnColumnSizes[0] = (int*)calloc(r,sizeof(int));
    for(int i = 0;i<r;i++){//初始化新矩阵
        returnColumnSizes[0][i] = c;
        ans[i]=(int*)calloc(c,sizeof(int));
    }
    for(int i = 0;i<r*c;i++){//新矩阵赋值
        ans[i/c][i%c] = mat[i/matColSize[0]][i%matColSize[0]];
    }
    return ans;
}

三、思路分析

  • 重塑矩阵,考察矩阵元素位置与列的对应关系。
  • 想象一个 m ∗ n m*n mn的矩阵,按行序,从 0 0 0行到 m − 1 m-1 m1行,首位相接放入一维数组 n u m s nums nums,那么数组大小是 m ∗ n m*n mn。用 i i i表示数组的某个元素,数组和矩阵的映射关系是 m a t r i x [ i / c o l u m n ] [ i % c o l u m n ] = n u m s [ i ] matrix[i/column][i\%column]=nums[i] matrix[i/column][i%column]=nums[i]
  • 对于矩阵压缩得到的一维数组,数组的 i i i只和矩阵的列 c o l u m n column column对应。
  • 同理,我们也可以用矩阵 c o l u m n column column得到对应数组的 i i i
  • 利用数组做中间使者,等价一下,两个矩阵也有列和列对应的关系。
  • 知道列和列存在对应关系,看代码就行~

四、代码分析

  • 理解思路很重要!
  • 博主欢迎读者在评论区留言,作为日更博主,看到就会回复的。

五、AC

AC

六、复杂度分析

  1. 时间复杂度: O ( m ∗ n ) O(m*n) O(mn) , m a t mat mat数组的大小= m ∗ n m*n mn。一次遍历,通过 m a t mat mat建立 a n s ans ans的时间复杂度是 O ( m ∗ n ) O(m*n) O(mn)
  2. 空间复杂度: O ( 1 ) O(1) O(1),不考虑保存答案的矩阵,没有使用额外的线性空间,空间复杂度 O ( 1 ) O(1) O(1)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清墨韵染

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值