Java 题解 | #牛牛的旗语传递#
牛牛的旗语传递
https://www.nowcoder.com/practice/810b1c80a9c341c4af69facac350d6bc
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param numRows int整型
* @return string字符串
*/
public String decodeFlag (String s, int numRows) {
// write code here
if (numRows == 1) {
return s;
}
List<StringBuilder> rows = new ArrayList<>();
for (int i = 0; i < Math.min(numRows, s.length()); i++) {
rows.add(new StringBuilder());
}
int curRow = 0;
boolean goingDown = false;
for (char c : s.toCharArray()) {
rows.get(curRow).append(c);
if (curRow == 0 || curRow == numRows - 1) {
goingDown = !goingDown;
}
curRow += goingDown ? 1 : -1;
}
StringBuilder ret = new StringBuilder();
for (StringBuilder row : rows) {
ret.append(row);
}
return ret.toString();
}
}
编程语言是 Java。
该题考察的知识点包括字符串操作、循环、条件判断、数组的使用以及字符串构建。
代码的文字解释如下:
- 如果
numRows等于 1,直接返回原始字符串s。 - 创建了一个
ArrayList集合rows,用于存储每一行的字符。循环遍历numRows和s长度的较小值,为每一行创建一个StringBuilder实例,并将其添加到rows集合中。 - 初始化变量
curRow为 0,goingDown表示是否正在向下移动的标志。 - 遍历输入字符串
s中的每个字符:将当前字符追加到当前行的 StringBuilder 对象中,实现按行存储字符。如果当前行是第一行或最后一行,则改变 goingDown 的状态,以控制行的移动方向。根据 goingDown 的状态,更新 curRow 的值,从而决定下一个字符应该被添加到哪一行。 - 创建一个
StringBuilder对象ret,用于最终存储解码后的结果。 - 遍历
rows集合中的每一行,将其内容逐一追加到ret中。 - 将
ret转换为字符串并返回,这就是解码后的结果。
快手公司氛围 614人发布
查看17道真题和解析