题目解析
* 输入输出:第一行输入一个由数字 0,1,2,30,1,2,30,1,2,3 组成的字符串(可能包含前导零,需作为字符串处理)。输出 555 行,每行表示对应行上所有数字的 5×55\times55×5 图案横向拼接结果。
* 数据范围:0≤n≤1060\le n\le 10^60≤n≤106,且 nnn 仅由 0,1,2,30,1,2,30,1,2,3 组成。最多 777 位数字(10610^6106 是 777 位数)。
* 复杂度要求:设 LLL 为数字位数,时间复杂度 O(5L)=O(L)O(5L)=O(L)O(5L)=O(L),空间复杂度 O(1)O(1)O(1)(仅需存储固定的 202020 行模板)。
* 算法知识点:字符串处理、模拟、二维图形的一维化存储、按行扫描输出
思路解析
1. 模板预处理:将 0,1,2,30,1,2,30,1,2,3 四个数字的 5×55\times55×5 点阵图案按"数字优先、行次之"的顺序存入一维数组。具体地,数字 ddd 的第 jjj 行(0≤j<50\le j<50≤j<5)存储在索引 d×5+jd\times 5+jd×5+j 处。
2. 行列转换输出:由于要求横向拼接多个数字,采用按行扫描策略:外层循环 jjj 从 000 到 444 遍历图案的每一行,内层循环从左到右遍历输入字符串的每个字符。
3. 索引定位:对于第 iii 个字符,将其转换为整数 num=s[i]−′0′\textit{num}=s[i]-'0'num=s[i]−′0′,该数字当前应输出的第 jjj 行模板位于数组索引 num×5+j\textit{num}\times 5+jnum×5+j 处。
4. 格式控制:内层循环将同一行上所有数字的对应图案片段连续输出,每完成一行后输出换行符,形成最终的 555 行图形。
完整代码