
2025-07-22:跳过交替单元格的之字形遍历。用go语言,你有一个大小为 m 行 n 列的二维正整数数组 grid,要求以一种“锯齿形”的方式遍历整个数组:
最终返回一个数组,包含按照上述规则访问的所有元素的值,顺序和跳过规则都要遵循以上描述。
2 <= n == grid.length <= 50。
2 <= m == grid[i].length <= 50。
1 <= grid[i][j] <= 2500。
输入: grid = [[1,2],[3,4]]。
输出: [1,4]。
解释:

在这里插入图片描述
题目来自力扣3417。
grid[0]。i = 0,是偶数,因此从左到右遍历。grid[0][0] = 1,访问 1。2)。[1]。i = 1,是奇数,因此从右到左遍历。grid[1][1] = 4,访问 4。3)。[4]。[1]。[4]。[1, 4]。m 行。n,但跳过交替单元格后实际访问的列数约为 n/2。O(m * n/2) = O(m * n)。m * n,但实际跳过后约为 m * n/2。O(m * n)(输出空间不计入额外空间时则为 O(1),但通常输出空间也算额外空间)。O(m * n)。O(m * n)(如果输出空间计入额外空间)。如果不计入输出空间,则为 O(1)。.
package main
import (
"fmt"
)
func zigzagTraversal(grid [][]int) (ans []int) {
n := len(grid[0])
end := n - 1 - n%2
for i, row := range grid {
if i%2 > 0 {
for j := end; j >= 0; j -= 2 {
ans = append(ans, row[j])
}
} else {
for j := 0; j < n; j += 2 {
ans = append(ans, row[j])
}
}
}
return
}
func main() {
grid := [][]int{{1, 2}, {3, 4}}
result := zigzagTraversal(grid)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
def zigzag_traversal(grid):
ans = []
n = len(grid[0])
end = n - 1 - n % 2
for i, row in enumerate(grid):
if i % 2 > 0:
for j in range(end, -1, -2):
ans.append(row[j])
else:
for j in range(0, n, 2):
ans.append(row[j])
return ans
if __name__ == "__main__":
grid = [[1, 2], [3, 4]]
result = zigzag_traversal(grid)
print(result)