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 时使用了错误的索引。下面是修正后的代码:

  1. func orangesRotting(grid [][]int) int {
  2. var totalOrigin, curOrigin, totalTime int
  3. queue := make([][2]int, 0)
  4. height := len(grid)
  5. width := len(grid[0])
  6. // Count the number of fresh oranges and add rotten oranges to the queue.
  7. for i := 0; i < height; i++ {
  8. for j := 0; j < width; j++ {
  9. if grid[i][j] == 1 {
  10. totalOrigin++
  11. }
  12. if grid[i][j] == 2 {
  13. queue = append(queue, [2]int{i, j})
  14. }
  15. }
  16. }
  17. for len(queue) > 0 {
  18. size := len(queue)
  19. totalTime++
  20. curOrigin = 0 // Reset current count for each time unit
  21. for i := 0; i < size; i++ {
  22. pos := queue[0]
  23. queue = queue[1:]
  24. dx := [4]int{1, -1, 0, 0}
  25. dy := [4]int{0, 0, 1, -1}
  26. for j := 0; j < 4; j++ { // Use 'j' instead of 'i'
  27. tx := pos[0] + dx[j]
  28. ty := pos[1] + dy[j] // Change pos[0] to pos[1]
  29. if tx < 0 || tx >= height || ty < 0 || ty >= width || grid[tx][ty] != 1 {
  30. continue
  31. }
  32. grid[tx][ty] = 2
  33. curOrigin++
  34. queue = append(queue, [2]int{tx, ty})
  35. }
  36. }
  37. totalOrigin += curOrigin // Update totalOrigin with new rotten counts
  38. }
  39. if curOrigin+totalOrigin == totalOrigin {
  40. return totalTime - 1 // Adjust return value to exclude the last increment
  41. }
  42. return -1
  43. }

修正点:

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

注意:

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?