关键在于用边界变量和方向状态将图形规律转化为坐标逻辑:回型矩阵用top/bottom/left/right动态收缩;z字形按i+j=level分层,奇偶决定填数方向;螺旋打印每段前检查边界有效性。

用数据结构控制矩阵打印排列,关键在于把图形规律转化为坐标逻辑和循环边界,而不是硬编码每个位置。核心是识别“填充顺序”和“边界收缩”这两个动作。
明确矩阵的生成逻辑而非单纯输出
比如回型矩阵(蛇形填数):不是先画框再填数,而是按“右→下→左→上”四步循环,每走完一步就收缩边界。用四个变量 top、bottom、left、right 动态标记当前可填区域,每次填完一行或一列就让对应边界向内移动1位。这样哪怕矩阵是 5×8 的长方形,逻辑也完全一致。
用嵌套循环+方向状态处理Z字形打印
Z字形(zigzag)打印依赖斜线层级。把矩阵看作由多条从左下到右上的对角线组成,每条线上的行列索引和为定值(i + j = level)。用一个外层循环遍历所有 level(从 0 到 m+n−2),内层根据 level 奇偶性决定方向:奇数 level 从上往下填(行增列减),偶数 level 从下往上填(行减列增),同时控制行列不越界。
顺时针螺旋打印靠分段+条件判断防重叠
一圈分四段:上边(左→右)、右边(上→下)、下边(右→左)、左边(下→上)。但最后一圈可能只剩一行、一列甚至一个点。所以每段开始前必须检查:
• 上边存在:top ≤ bottom
• 右边存在:left
• 下边存在:top
• 左边存在:left
这样能自然兼容所有矩形尺寸,无需单独写 1×n 或 n×1 的分支。
用二维数组索引映射替代字符串拼接
想打印像“00000 / 01111 / 01222…”这种数字递增+星号填充的矩阵,不要逐行拼字符串。直接用双重循环,对每个位置 (i, j) 判断:
• 若 j ≤ i → 填 j(即列号)
• 否则 → 填 i(即行号)
这样逻辑清晰、无冗余,扩展成任意大小都只需改外层参数。











