ZBLOG

func orangesRotting(grid [][]int) int { var totalOrigin, curOrigin, totalTime int queue := make([][2]int, 0) height := len(grid) width := len(grid[0]) for i := 0; i < height; i++ { for j := 0; j < width; j++ { if grid[i][j] == 1 { t...

你的代码有一些小错误,特别是在处理邻居坐标时。请注意,你在访问 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
}

修正点:

  1. 在计算 ty 时,应该使用 pos[1] 而不是 pos[0]
  2. 我在内部循环中用 j 替代了外部循环中的 i 来避免混淆。
  3. 更新了总新鲜橙子的计数逻辑,以确保程序正确追踪已经变坏的橙子。

注意:

  • 确保对返回时间进行调整,因为最后一次增加总时间并不代表有新的橙子变坏。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20467

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?