题解 | #牛牛的旗语传递#
题目考察的知识点
-
字符串处理:解码字符串涉及到对字符串的拆解、合并和重新排列等操作。
-
控制流:解码过程中需要根据当前行的位置和方向来决定字符的添加和移动方式,因此需要使用控制流语句来实现条件判断和循环。
-
字符串连接:解码完成后,需要将所有行的字符连接起来形成最终的解码结果。这涉及到字符串的连接操作。
题目解答方法的文字分析
根据题目要求,解码函数decodeFlag
需要接收两个参数:输入字符串s
和行数numRows
。函数的目标是将加密的字符串s
按照Z字形排列解码,并返回解码后的字符串。
函数内部的代码逻辑可以分为以下几个步骤:
-
判断行数是否为1,如果是1,则直接返回原字符串。
-
创建一个长度为行数的数组
rows
,用于保存每一行的字符。 -
初始化当前行变量
curRow
为0,布尔变量isGoingDown
为false,用于表示当前字符的添加方向。 -
遍历输入字符串
s
中的每个字符:-
将当前字符添加到对应的行中。
-
如果当前行是第一行或最后一行,则改变
isGoingDown
变量的值,用于决定下一个字符的添加方向。 -
根据
isGoingDown
的值,决定是向下移动(curRow
加1)还是向上移动(curRow
减1)。
-
-
将所有行的字符连接起来,形成解码后的字符串
decodedFlag
。 -
返回解码后的字符串
decodedFlag
。
本题解析所用的编程语言
本题解析所用的编程语言:JavaScript。
完整且正确的编程代码
function decodeFlag(s, numRows) {
if (numRows === 1) return s;
const len = Math.min(s.length, numRows);
const rows = [];
for (let i = 0; i < len; i++) rows[i] = "";
let curRow = 0;
let isGoingDown = false;
for (const char of s) {
rows[curRow] += char;
if (curRow === 0 || curRow === numRows - 1) isGoingDown = !isGoingDown;
curRow += isGoingDown ? 1 : -1;
}
let decodedFlag = "";
for (const row of rows) decodedFlag += row;
return decodedFlag;
}
题解 | 前端刷题 文章被收录于专栏
题目考察的知识点 题目解答方法的文字分析 本题解析所用的编程语言 完整且正确的编程代码