题解 | #牛群避免水洼#
牛群避免水洼
https://www.nowcoder.com/practice/43ba14f2c7344ec5bccdf2d650f2eaf2
考察的知识点:矩阵;
解答方法分析:
- 定义两个变量
startRow
和startCol
分别表示矩阵的起始行和起始列,初始值为0。 - 定义两个变量
endRow
和endCol
分别表示矩阵的结束行和结束列,初始值为矩阵的行数和列数减1。 - 进入一个循环,判断
startRow
是否小于等于endRow
并且startCol
是否小于等于endCol
,如果不满足则退出循环。 - 在循环中,先按照从左到右的顺序遍历
startRow
行的元素,并将其加入到有序列表中。 - 遍历完成后,将
startRow
增加1,表示下一次遍历从下一行开始。 - 再按照从上到下的顺序遍历
endCol
列的元素,并将其加入到有序列表中。 - 遍历完成后,将
endCol
减少1,表示下一次遍历从前一列开始。 - 判断
startRow
是否小于等于endRow
并且startCol
是否小于等于endCol
,如果满足则继续循环,否则退出循环。 - 最终得到的有序列表就是按照从左到右、从上到下的顺序遍历矩阵得到的。
所用编程语言:C++;
完整编程代码:↓
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型vector<vector<>> * @return int整型vector<vector<>> */ vector<vector<int> > avoidPuddles(vector<vector<int> >& matrix) { int m = matrix.size(); int n = matrix[0].size(); vector<bool> row(m, false); vector<bool> column(n, false); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (matrix[i][j] == 0) { row[i] = true; column[j] = true; } } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (row[i] || column[j]) { matrix[i][j] = -1; } } } return matrix; } };