class Solution {
public:
int numSpecial(vector<vector<int>>& mat) {
int row = mat.size();
int col = mat[0].size();
int c_index = -1;
int r_nums = 0;
int count = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (mat[i][j] == 1) {
c_index = j;
r_nums++;
}
}
if (r_nums == 1) {
for (int k = 0; k < row; k++) {
if (mat[k][c_index] == 1 && k != i) {
break;
}
if (k == row - 1) {
count++;
}
}
}
c_index = -1;
r_nums = 0;
}
return count;
}
};
思路
1 先按行求和,若为1,则遍历行找到1的位置,再遍历列,若无其他1,则结果+1;
2 遍历数组,保证每一行都一起遍历,开辟一个r_nums记录1出现的次数,c_index 记录1所在列数,若只有一次,则遍历c_index记录的列,若无其他1,则结果+1;
要点
上述是思路2的代码实现,思路1可以使用accumulate函数
accumulate使用:
- 头文件#include numeric;
- int suum=accumulate(va.begin(),va.end(),0); //第三个参数为累加的初始值;