包含 0 的行列进行矩阵置零

题目介绍

本题目要求实现一个算法,用于将矩阵中所有值为0的元素所在的行和列都置为0。这是一个常见的问题,通常出现在面试和算法竞赛中,考察对矩阵操作和空间复杂度的理解。

题目要求

  • 实现 setZeroes 函数,该函数接收一个矩阵的指针、矩阵的大小以及每行的列数数组,将矩阵中值为0的元素所在的行和列都置为0。

输入

  • 矩阵的大小 matrixSize
  • 每行的列数数组 matrixColSize
  • 矩阵的值,以一维数组的形式提供。

输出

  • 修改后的矩阵,其中所有值为0的元素所在的行和列都被置为0。

示例

假设输入矩阵为:

1 0 3
4 5 0
7 8 9

执行 setZeroes 函数后,输出矩阵应为:

1 0 0
0 5 0
7 0 9

代码介绍

  1. main.c 文件包含主函数,用于处理命令行输入,分配矩阵内存,调用 setZeroes 函数,并打印原始和修改后的矩阵。

  2. matrix_zero.c 文件包含 setZeroes 函数的框架,以及辅助函数 printMatrixfreeMatrix

详细提示信息

  • setZeroes 函数实现

    • 使用额外的数组 rowcol 来记录哪些行和列需要被置0。
    • 遍历矩阵,标记 rowcol 中相应的元素。
    • 根据 rowcol 的标记,将矩阵中相应的行和列置0。
  • main 函数解析

    • 检查命令行参数数量是否正确。
    • 分配内存给 matrixColSizematrix
    • 解析命令行参数,填充矩阵值。
    • 调用 setZeroes 函数。
    • 打印原始和修改后的矩阵。
    • 释放分配的内存。
  • printMatrix 函数

    • 打印矩阵的当前状态。
  • freeMatrix 函数

    • 释放矩阵占用的内存。

注意事项

  • 确保 setZeroes 函数在修改矩阵前正确记录了需要置0的行和列。
  • 注意内存分配和释放,避免内存泄漏。
  • 考虑空间复杂度,尽量减少额外空间的使用。
  • 参与者需要根据题目要求,完成 setZeroes 函数的实现,确保能够正确地将矩阵中为0的元素所在的行和列都置为0。同时,注意代码的健壮性和内存管理。通过命令行参数和打印结果,展示算法的实际效果。