你的代码有一些小错误,特别是在处理邻居坐标时。请注意,你在访问 ty
时使用了错误的索引。下面是修正后的代码:
func orangesRotting(grid [][]int) int {
var totalOrigin, curOrigin, totalTime int
queue := make([][2]int, 0)
height := len(grid)
width := len(grid[0])
// Count the number of fresh oranges and add rotten oranges to the queue.
for i := 0; i < height; i++ {
for j := 0; j < width; j++ {
if grid[i][j] == 1 {
totalOrigin++
}
if grid[i][j] == 2 {
queue = append(queue, [2]int{i, j})
}
}
}
for len(queue) > 0 {
size := len(queue)
totalTime++
curOrigin = 0 // Reset current count for each time unit
for i := 0; i < size; i++ {
pos := queue[0]
queue = queue[1:]
dx := [4]int{1, -1, 0, 0}
dy := [4]int{0, 0, 1, -1}
for j := 0; j < 4; j++ { // Use 'j' instead of 'i'
tx := pos[0] + dx[j]
ty := pos[1] + dy[j] // Change pos[0] to pos[1]
if tx < 0 || tx >= height || ty < 0 || ty >= width || grid[tx][ty] != 1 {
continue
}
grid[tx][ty] = 2
curOrigin++
queue = append(queue, [2]int{tx, ty})
}
}
totalOrigin += curOrigin // Update totalOrigin with new rotten counts
}
if curOrigin+totalOrigin == totalOrigin {
return totalTime - 1 // Adjust return value to exclude the last increment
}
return -1
}
修正点:
- 在计算
ty
时,应该使用pos[1]
而不是pos[0]
。 - 我在内部循环中用
j
替代了外部循环中的i
来避免混淆。 - 更新了总新鲜橙子的计数逻辑,以确保程序正确追踪已经变坏的橙子。
注意:
- 确保对返回时间进行调整,因为最后一次增加总时间并不代表有新的橙子变坏。
内容由零声教学AI助手提供,问题来源于学员提问