【程序员面试金典】【数组】面试题 01.08 - 零矩阵
一 目录
不折腾的前端,和咸鱼有什么区别
目录 |
---|
一 目录 |
二 题目 |
三 解题思路 |
四 统计分析 |
五 解题套路 |
二 题目
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例 2:
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zero-matrix-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var setZeroes = function(matrix) {
};
根据上面的已知函数,小伙伴们可以先尝试破解本题,确定了自己的答案后再看下面代码。
三 解题思路
分 2 步骤:
-
取 0 -
替换
代码如下:
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
// 计划两步走:1. 取 0;2. 替换
const setZeroes = (matrix) => {
const M = matrix[0].length, // 横排
N = matrix.length, // 纵排
zeroList = []; // 0 集合
for (let i = 0; i < N; i++) {
for (let j = 0; j < M; j++) {
if (matrix[i][j] === 0) {
zeroList.push([i, j]);
}
}
}
for (let i = 0; i < zeroList.length; i++) {
const [left, right] = zeroList[i];
for (let j = 0; j < M; j++) {
matrix[left][j] = 0;
}
for (let k = 0; k < N; k++) {
matrix[k][right] = 0;
}
}
return matrix;
};
四 统计分析
本题不需要统计分析。
五 套路分析
本题暂未发现任何套路,如果有但是 jsliang 后面发现了的话,会在 GitHub 进行补充。
如果小伙伴有更好的思路想法,或者没看懂其中某种解法,欢迎评论留言或者私聊 jsliang~
不折腾的前端,和咸鱼有什么区别!
jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。
浪子神剑 会每天更新面试题,以面试题为驱动来带动大家学习,坚持每天学习与思考,每天进步一点!
jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。