我正在实现“最多学生参加考试”的算法。
给定一个代表教室中座位分布的m*n矩阵座位。如果座位坏了,则用“#”字符表示,否则用“.”表示。性格。
学生可以看到坐在左边、右边、左上角和右上角的学生的答案,但他看不到坐在他前面或后面的学生的答案。返回可以在没有任何作弊的情况下一起参加考试的最大学生数量。
学生必须坐在状况良好的座位上。
我的解决方案是:如果我找到一个好的座位,我就循环矩阵".",我检查左边、右边、左上角和右上角,看看是否有另一个学生(避免作弊)。如果没有,我增加我的答案,并将此座位设置为已占。
var maxStudents = function(seats) {
let ans = 0;
if (seats === null || seats.length === 0) return ans;
for (let i = 0; i < seats.length; i++) {
for (let j = 0; j < seats[i].length; j++) {
if (seats[i][j] === ".") {
if (seatStudent(seats, i, j)) {
seats[i][j] = "S";
ans++;
}
}
}
}
return ans;
};
const seatStudent = function(seats, i, j) {
if (j + 1 < seats[i].length && seats[i][j + 1] === "S") return false;
if (j - 1 > 0 && seats[i][j - 1] === "S") return false;
if (i - 1 > 0 && j + 1 < seats[i].length && seats[i - 1][j + 1] === "S")
return false;
if (i - 1 > 0 && j - 1 > 0 && seats[i - 1][j - 1] === "S") return false;
return true;
};对于输入:
seats = [["#",".","#","#",".","#"],
[".","#","#","#","#","."],
["#",".","#","#",".","#"]]答案应该是4。然而,我得到了5。我不明白为什么它返回5。
谢谢
发布于 2020-06-30 23:53:52
if(i-1 > 0)应该是
if(i-1 >= 0)好了。
https://stackoverflow.com/questions/62661078
复制相似问题